Сравнение дат SQL Server из строки в дату и время

Я использую базу данных SQL Server 2016 и в своей хранимой процедуре хочу сравнить две даты.

Я получаю один параметр даты в виде строки в формате «дд-мм-гггг».

@stringdate = '28-12-1990'   // I get date in this format

Я хочу преобразовать это в формат даты и сравнить со столбцом базы данных, который имеет тип datetime.


person siva    schedule 09.01.2016    source источник


Ответы (3)


Вам нужно использовать функцию CAST() для преобразования в формат даты.

Попробуйте этот код:

CAST(dbdatetimecolumnname AS date) = (CAST(RIGHT(@stringdate,4) + '-' + LEFT(RIGHT(@stringdate,7),2) + '-' + LEFT(@stringdate,2) AS DATE))

Используемые функции Right() и Left() преобразуют строковый формат даты в формат даты db.

person Kumaresan K    schedule 09.01.2016

Поскольку вы используете SQL Server 2016, вы можете использовать функцию PARSE и определить культуру, необходимую для успешного анализа этой строки.

Что-то типа

DECLARE @stringdate VARCHAR(20) = '28-12-1990';
DECLARE @parseddate DATETIME2(3);

SELECT @parseddate = PARSE(@stringdate AS DATE USING 'de');
SELECT @parseddate

Я использовал культуру de для Германии, поскольку формат даты, который у вас есть, является европейским форматом (dd-MM-yyyy).

person marc_s    schedule 09.01.2016

Проверь это:

set dateformat dmy
declare @d datetime='31-01-2016'
select @d
go


set dateformat ymd

declare @d datetime='31-01-2016'
select @d
go
person shadow    schedule 09.01.2016
comment
Нет, это не сработает. Только что увидел, что параметр является строкой, а не DateTime. Извиняюсь. - person shadow; 09.01.2016