2017-02-20 2 views
0

У меня есть столбец nvarchar в таблице сервера Sql, в котором хранятся значения даты в формате mm/yyyy.Преобразование nvarchar (mm/yyyy) в DateTIme на сервере Sql

Пример: 03/2017

Теперь, как преобразовать эту строку в дату, так что я могу сравнить это время с даты текущего времени даты (по сравнению с предыдущим месяцем и год только)

+3

выбрать СУБД, mySQL или SQL Server? – apomene

+0

SQL Server 2008 – Pearl

ответ

3

Мы можем разделить и сделать это произойдет, как показано ниже:

declare @v varchar(7) 
select @v = '03.2017' 

select convert(datetime,right(@v,4) + left(@v,2) + '01') 
0

Используйте LEFT и RIGHT:

SELECT CONVERT(DATETIME, RIGHT('03/2017', 4) + '-' + LEFT('03/2017', 2) + '-01') 
0

Попробуйте

Convert(datetime,'01/' + [field],103) 
0

Как уже упоминалось, разбор строки это правильный подход, но я добавлю это, так как он также демонстрирует получение в первый день текущего месяца для сравнения, и что было упомянуто в первоначальном сообщении.

DECLARE @test varchar(10) = '03/2017' 

DECLARE @firstOfMonth datetime 
DECLARE @toCompare datetime 

SELECT @firstOfMonth = 
    CAST(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '/' + CAST(MONTH(GETDATE()) AS VARCHAR(2)) + '/01' AS DATETIME) 

SELECT @toCompare = CONVERT(datetime, right(@test, 4) + '-' + left(@test, 2) + '-01') 
0
declare @strDate nvarchar(10) = '03/2017' 
declare @newDate datetime = null 

select @newDate= convert(date,replace(@strDate,'/','/1/')) 

select month (@newdate) 
select year (@newdate) 

--now сделать ваш сравнить .----

0

Гм, может быть, я толстая, в голове, но это не похоже, что ОП хочет, чтобы фактически преобразовать NVARCHAR значение Задан ... он просто хочет, чтобы сравнить месяц и год от NVARCHAR значения до MONTH() и YEAR() фактического DATETIME значение, и излагается его немного плохо ...

реальный ответ, ИМО , в том, что вы не может конвертировать MM/YYYY самостоятельно в значение DATETIME, поэтому каждый пытается добавить первый месяц; но почему бы не просто сделать что-то вроде этого ...

SELECT * 
FROM <sometable> 
WHERE MONTH(<sometable>.<somecolumn>) = LEFT('03/2017',2) 
AND YEAR(<sometable>.<somecolumn>) = RIGHT('03/2017',4) 
; 

И поскольку ОП также задан вопрос о «текущего времени даты, сравнив месяц и только год», вы могли бы сделать ...

SELECT * 
FROM <sometable> 
WHERE MONTH(GETDATE()) = LEFT(<somecolumn>,2) 
AND YEAR(GETDATE()) = RIGHT(<somecolumn>,4) 
; 

I думаю это то, что он хотел спросить ...? Может быть?

Смежные вопросы