У меня есть такие данные:

+-----+---------+----------+
| id  | name    | expdate  |
+-----+---------+----------+
| 1   | chookies| 02/2015  |
| 2   | snack   | 03/2015  |
| 3   | snack1  | 04/2015  |
+-----+---------+----------+

Тип данных expdate - varchar(7), и я хочу знать имя файлов cookie, срок действия которых истек с настоящего момента до 03/2015.

Я пробовал с этим, но получаю сообщение об ошибке:

select     
    id, name, 
    convert(datetime, '01/' + expdate, 103) 
from 
    cookies 
where 
    datediff(month, datetime, convert(datetime, '01/' + expdate, 103))

Ошибка:

Ошибка преобразования при преобразовании даты и времени из символьной строки.

Я использую SQL Server 2005, что мне не хватает?

Может кто-нибудь мне помочь?

Спасибо

1
empugandring 13 Дек 2014 в 19:28

2 ответа

Лучший ответ

Пытаться:

select 
    id, name, expdate 
from 
    cookies 
where 
    convert(datetime, '01/' + expdate, 103) between getdate() 
                                                and convert(datetime, '01/03/2015', 103)

Нет необходимости использовать функцию datediff, вам просто нужно проверить, находится ли expdate между заданным периодом.

Кроме того, вы получаете эту ошибку, потому что второй параметр в функции datediff должен быть действительной датой, а не просто строкой 'datetime'.

0
marc_s 13 Дек 2014 в 17:18

Это можно сделать с помощью простого оператора where в предложении where, например:

select id,name,convert(datetime,'01/'+expdate,103) 
from cookies 
where convert(datetime,'01/'+expdate,103) between getdate() and convert(datetime,'2015-03-01 00:00:00.000')
1
Eduard Uta 13 Дек 2014 в 16:39