datetime参数数据类型varchar对于convert函数的参数3无效

时间:2015-12-06 17:38:16

标签: sql sql-server tsql

我正在尝试使用以下内容填充数据库中的表:

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无效

我做错了什么?

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接受样式。

  

@Brian Stork

     

转换为日期时间时,无法添加样式。日期时间没有   接受风格。您可以将日期时间转换为带有样式的字符,但是   不是其他方式

根据官方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'

即可