我在SQL Server 2008中有一个数据库表,其中的列具有以下格式的日期字符串: m / dd / yyyy h:mm:ss(7/11/2015 1:01:45 PM)
我想转换为yyyy-mm-dd hh:mm:ss(2015-07-11 13:01:45)
我尝试过使用CAST和CONVERT,但似乎没有任何效果。任何帮助将不胜感激。
实施例:
SELECT CONVERT(DATETIME, DATE_TIME, 120), DATE_TIME FROM TB1
会导致以下错误:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
答案 0 :(得分:3)
SELECT CONVERT(nvarchar(max), CONVERT(datetime, '7/11/2015 1:01:45PM', 101), 120)
Here是很多例子
答案 1 :(得分:1)
我之前遇到过这种情况并且很糟糕。很可能,你有一个无法转换为日期时间的值,你需要找到它(或者它们)。 尝试选择isdate(字符串列)= 0的位置,并查看是否显示任何行。修复它们或排除它们。
答案 2 :(得分:1)
我必须从M / D / YYYY h:mm:ss AM / PM转换为Datetime。请注意我的本地时间是DD-MM-YYYY所以我必须在转换为Datetime之前转换为该格式。要转换的字段名称是表NIF中的“Valeur”。以下是我在SQL 2008中的使用方法:
CREATE TABLE #NIF (Valeur VARCHAR(25))
INSERT INTO #NIF (Valeur) VALUES
('8/20/2015 1:11:31 AM'),
('8/19/2015 10:37:32 PM'),
('10/7/2015 8:51:37 PM'),
('9/8/2015 3:27:17 PM')
SELECT NIF.Valeur, CASE WHEN CHARINDEX('PM',NIF.Valeur) = 0
THEN CONVERT(datetime,substring(NIF.Valeur, P2.Pos + 1, P3.Pos - P2.Pos - 1) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P3.Pos + 1, P4.Pos - P3.Pos - 3),8) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P1.Pos + 1, P2.Pos - P1.Pos - 1),2) + ' '
+ RIGHT('0' + substring(NIF.Valeur, 1, P1.Pos-1),2))
--add 12 hours if PM
ELSE DATEADD(hour,12,CONVERT(datetime,substring(NIF.Valeur, P2.Pos + 1, P3.Pos - P2.Pos - 1) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P3.Pos + 1, P4.Pos - P3.Pos - 3),8) + '-'
+ RIGHT('0' + substring(NIF.Valeur, P1.Pos + 1, P2.Pos - P1.Pos - 1),2) + ' '
+ RIGHT('0' + substring(NIF.Valeur, 1, P1.Pos-1),2)))
END
FROM #NIF AS NIF (nolock)
cross apply (select (charindex('/', NIF.Valeur))) as P1(Pos)
cross apply (select (charindex('/', NIF.Valeur, P1.Pos+1))) as P2(Pos)
cross apply (select (charindex(' ', NIF.Valeur, P2.Pos+1))) as P3(Pos)
cross apply (select (charindex('M', NIF.Valeur, P3.Pos+1))) as P4(Pos)
WHERE CHARINDEX('M',NIF.Valeur) > 0 --(I had other values in the table with proper format)
您只需更改元素的顺序即可设置特定的本地时间。
获得的结果
8/20/2015 1:11:31 AM ---> 2015-08-20 01:11:31.000
2015年8月19日10:37:32 PM ---> 2015-08-19 22:37:32.000
10/7/2015 8:51:37 PM ---> 2015-10-07 20:51:37.000
9/8/2015 3:27:17 PM ---> 2015-09-08 15:27:17.000