В настоящее время я работаю над обновлением базы данных компании, в которой в одной из таблиц CreateDt
имеет тип nvarchar(20)
и хранит даты следующими способами:
12 May 12 29/03/2011 9/24/2012 29/01/2001 08:51:56
Есть 17000 строк.
Так что в настоящее время я работаю над кодом, в котором я смогу преобразовать все эти даты в один формат, такой как DD-MM-YYYY
.
Однако я изо всех сил пытаюсь найти что-нибудь подходящее.
До сих пор я пробовал:
WITH CreateDt1
AS
(
SELECT '14 DECEMBER 12' AS CreateDt1
UNION ALL
SELECT '13/10/2005'
UNION ALL
SELECT '12/14/2012'
UNION ALL
SELECT '24/05/2002 09:28:58'
UNION ALL
SELECT '28/02/2011'
)
SELECT
CreateDt1,
CASE WHEN ISDATE(CreateDt1) = 1
THEN CAST(CreateDt1 AS datetime)
ELSE
CASE WHEN SUBSTRING(CreateDt1, 3, 1) = '/'
THEN
CASE WHEN ISDATE(SUBSTRING(CreateDt1, 4, 2) + '/' + LEFT(CreateDt1, 2) + '/' + RIGHT (CreateDt1, 4)) = 1
THEN CAST(SUBSTRING(CreateDt1, 4, 2) + '/' + LEFT(CreateDt1 , 2) + '/' + RIGHT (CreateDt1, 4) AS datetime)
END
END
END AS NewDate
FROM fct_Project;
Однако это возвращает нулевые значения для таких дат, как 29/01/2001 08:51:56
.
11/12/2012
, чтобы усложнить задачу. - person jarlh   schedule 07.03.201913/10
и12/14
в данных. Как вы планируете обращаться с10/11
? 11 октября или 10 ноября? - person Salman A   schedule 07.03.2019