我正在尝试使用以下内容填充数据库中的表:
INSERT INTO student
VALUES (102, 'Mr.', 'Fred', 'Crocitto', '101-09 120th St.', '11419', '718-555-5555',
'Albert Hildegard Co.', '22-JAN-03', 'BROSENZWEIG',
CONVERT(DATETIME, '19-JAN-2007 00:00: 00','DD-MON-YYYY HH24:MI:SS'),
'BROSENZW', CONVERT(DATETIME, '22-JAN-2007 00:00:00', 'DD-MON-YYYY HH24:MI:SS'));
当我执行它时,我收到此错误消息:
Msg 8116,Level 16,State 1,Line 2
参数数据类型varchar对于转换函数的参数3无效
我做错了什么?
答案 0 :(得分:2)
您可以将CONVERT
与样式113
一起使用,或者只使用字符串日期字面值:
CONVERT(data_type [(length)],表达式 [,style] )
CREATE TABLE #student(col DATETIME /*,rest_of_columns */);
INSERT INTO #student
VALUES (CONVERT(DATETIME, '19-JAN-2007 00:00:00',113) /* ,rest_of_columns */);
INSERT INTO #student -- style 113 is default so you can skip convert
VALUES ('19-JAN-2007 00:00:00');
SELECT *
FROM #student;
的 LiveDemo
强>
修改强>
Datetime接受样式。
转换为日期时间时,无法添加样式。日期时间没有 接受风格。您可以将日期时间转换为带有样式的字符,但是 不是其他方式
根据官方CONVERT
文件(部分备注):
╔══════════════════════════╦═════════════════════╦══════════╦══════════════════╗
║ Without century (yy) (1) ║ With century (yyyy) ║ Standard ║ Input/Output (3) ║
╚══════════════════════════╩═════════════════════╩══════════╩══════════════════╝
3 转换为datetime时输入; 转换为字符数据时输出。
另外请考虑以下示例:
CREATE TABLE #tab(col DATETIME);
INSERT INTO #tab
VALUES ('12.02.02')
,(CONVERT(DATETIME, '12.02.02', 2));
SELECT *
FROM #tab;
的 LiveDemo2
强>
结果:
╔═════════════════════╗
║ col ║
╠═════════════════════╣
║ 2002-12-02 00:00:00 ║
║ 2012-02-02 00:00:00 ║
╚═════════════════════╝
答案 1 :(得分:0)
"我做错了什么?"您正在为SQL Server函数使用Oracle / Postgres参数(将to_char()
与convert()
混淆)。
最简单的解决方案是使用表示使用ISO标准格式的日期时间的字符串:
INSERT INTO student
VALUES (102,'Mr.','Fred','Crocitto','101-09 120th St.','11419','718-555-5555',
'Albert Hildegard Co.','22-JAN-03','BROSENZWEIG',
'2007-01-19', 'BROSENZW', '2007-01-22');
答案 2 :(得分:0)
Datetime不接受样式。如果您想将其转换为字符串,请使用convert(char(length),'datevale','style')
,但如果您的列类型为DATETIME,则无需添加样式。
根本不使用转换。只需使用字符串'19-JAN-2007 00:00:00'