SQL Server 2016(130)无法转换日期时间'18 -04-14 04:17:48.000000000 PM'

时间:2018-04-06 14:56:18

标签: sql-server tsql sql-server-2016-express

我是SQL Server 2016的新手(兼容版本130)。将一个varchar列转换为datetime2时出错。 简单试试

std::multimap<Key,Value>

作为解决方法,我甚至尝试过

select convert( datetime2, '18-04-14 04:17:48.000000000 PM', 131)
  

错误消息:从字符串转换日期和/或时间时转换失败。

3 个答案:

答案 0 :(得分:3)

如果您不了解特定的文化[风格],您可以使用简单的技巧来检查它(for i=1:c for j=1:c if j!=i for k=1:N_+ @constraint(m,2*y[i,j,k]- sum{x[h,i] for h=0:N_0 if h!=i}- sum{x[l,k] for l=1:c if l !=k} <=0) end end end end ):

TRY_CONVERT

<强> DBFiddle Demo

然后使用正确的r:

WITH cte AS (
  select r, '18-04-14 04:17:48.000000000 PM' AS input,
     try_convert( datetime2, '18-04-14 04:17:48.000000000 PM', r) AS result
  FROM (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS r 
        FROM dbo.syscolumns s1,dbo.syscolumns s2) s
  WHERE r <= 255 
)
SELECT *
FROM cte
WHERE result IS NOT NULL
ORDER BY r ASC;

答案 1 :(得分:1)

看起来您使用的日期格式是“意大利语”,因此以下简单代码将为您提供答案。

选择转换(datetime2,'18 -04-14 04:17:48.000000000 PM',5)

答案 2 :(得分:0)

那是因为您提供的样式标签与日期不匹配。根据{{​​3}}的样式标记131使用格式dd/mm/yyyy hh:mi:ss:mmmAM。你的日期看起来不像那样。

该页面上没有任何样式标记与您使用的样式相匹配,因此简单的CONVERT无效。

假设您无法更改数据的布局,这是一种方式,但它很麻烦:

SELECT CONVERT(datetime2,REPLACE(CONVERT(varchar(10),CONVERT(datetime2,REPLACE(LEFT('18-04-14 04:17:48.000000000 PM',8),'-','/'),11),102),'.','-') + 'T' +
                         CONVERT(varchar(21),CONVERT(time,RIGHT('18-04-14 04:17:48.000000000 PM',21))))

编辑:以及一些额外的例子,并用于表格:

CREATE TABLE #Sample (OddDate varchar(50));
INSERT INTO #Sample
VALUES ('18-04-14 04:17:48.000000000 PM'),
       ('18-03-31 12:58:45.000000000 AM'),
       ('18-02-24 12:58:45.000000000 PM'),
       ('17-01-04 07:59:59.000000000 AM');

SELECT CONVERT(datetime2,REPLACE(CONVERT(varchar(10),CONVERT(datetime2,REPLACE(LEFT(S.OddDate,8),'-','/'),11),102),'.','-') + 'T' +
                         CONVERT(varchar(21),CONVERT(time,RIGHT(S.OddDate,21))))
FROM #Sample S;
GO

DROP TABLE #Sample;

返回:

---------------------------
2018-04-14 16:17:48.0000000
2018-03-31 00:58:45.0000000
2018-02-24 12:58:45.0000000
2017-01-04 07:59:59.0000000