我有一个日期存储在mm/dd/yyyy形式的字符串,它被传递到SQL Server SP中插入到DB中。如何将其转换为yyyy-mm-dd格式,以便SQL Server实际上将其正确插入到具有日期时间类型的列中?只是保持字符串mm/dd/yyyy似乎没有做任何事情。
只要可能,就应该避免使用与文化相关的日期格式。
看这个:
DECLARE @StringDate VARCHAR(100)='06/29/2016';
SET LANGUAGE ENGLISH;
SELECT CAST(@StringDate AS DATE)
/*
Throws an exception!
SET LANGUAGE GERMAN;
SELECT CAST(@StringDate AS DATE)
*/
阅读有关TSQL: CONVERT及其格式的信息。你的格式是数字101:
SELECT CONVERT(DATE,@StringDate,101)
最好是使用独立的格式
您可以使用PARSE()从特定文化格式创建DATETIME对象,然后将其转换为所需的字符串:
select convert(varchar(20), parse('02/15/2016' as datetime2 using 'en-US'), 20);
20是CONVERT()对ODBC日期样式(YYYY-mm-dd)的特定代码。
有多种方法可以做到这一点,这里有三种:
您可以预先设置DATEFORMAT设置:
SET DATEFORMAT mdy;
INSERT INTO Table1 (DateCol) VALUES ('09/30/2016');
或者您可以使用CONVERT函数:
INSERT INTO Table1 (DateCol) VALUES (CONVERT(datetime, '09/30/2016', 101))
或者最后你可以使用PARSE函数,这是更灵活的,因为它将接受其他日期格式,如'Friday, 30 September 2016',但显然有点慢:
INSERT INTO Table1 (DateCol) VALUES (PARSE('09/30/2016' as datetime using 'en-US'))