Как получить год хиджры даты даты SQL Server - PullRequest
0 голосов
/ 23 мая 2018

Я искал и перепробовал множество примеров, которые не удалось решить, моя дата хиджры, например,

19/07/1440

Я пробовал этот запрос

 SELECT TOP 200   
     DATEPART(YEAR, EndDateHejri)
 FROM 
     student

, но я получаю эту ошибку

Не удалось выполнить преобразование при преобразовании даты и / или времени из строки символов

Я не могу устранить ошибку - надеюсь, что ваши предложения

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Я немного из Google-Fu и формат 131 должен помочь вам конвертировать даты хиджры в григорианские даты ...

DECLARE @hijri DATETIME = CONVERT(datetime, ' 7/05/1421 12:14:35:727PM', 131)

SELECT @hijri

К сожалению, все функции даты (DATEPART(), DATENAME(), даже DATEADD() и т. д.) все основаны на манипулировании григорианскими датами.Поэтому вы не можете их использовать.

Итак, вы вынуждены использовать строковые манипуляции.

DECLARE @hijri DATETIME = CONVERT(datetime, ' 7/05/1421 12:14:35:727PM', 131)

SELECT @hijri

SELECT DATEPART(year, @hijri)
-- Gives 2000 :(

SELECT RIGHT(CONVERT(VARCHAR(10), @hijri, 131), 4)
-- Gives 1421 :)

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=901209ae0cdcf38cdcdea8afad4fd034

0 голосов
/ 23 мая 2018

Отправка другого ответа.Поскольку ОП только после года, и они заявили, что он всегда в формате 00/00/yyyy, почему бы просто не использовать RIGHT?Итак:

SELECT RIGHT(EndDateHejri,4) as HejriYear;
0 голосов
/ 23 мая 2018

Пожалуйста, попробуйте следующий код, чтобы получить правильный вывод.

SELECT DATEPART(YEAR,CONVERT(datetime2(0),convert(VARCHAR,EndDateHejri),103));
...