Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server将int转换为日期_Sql Server_Casting - Fatal编程技术网

Sql server SQL Server将int转换为日期

Sql server SQL Server将int转换为日期,sql-server,casting,Sql Server,Casting,我有一个场景,其中我有一个int列,其中包含以下日期,例如: 20131210 20131209 我想要的是,我想把上面的转换成一个日期数据类型,这样我就可以将它与GETDATE()函数一起使用。 这是我的尝试,但我得到一个错误: SELECT CONVERT(DATETIME, CONVERT(varchar(8), MyColumnName)) FROM MyTable WHERE DATEADD(day, -2, CONVERT(DATETIME, CONVERT(CHAR(8), MyC

我有一个场景,其中我有一个int列,其中包含以下日期,例如:

20131210

20131209

我想要的是,我想把上面的转换成一个日期数据类型,这样我就可以将它与GETDATE()函数一起使用。 这是我的尝试,但我得到一个错误:

SELECT CONVERT(DATETIME, CONVERT(varchar(8), MyColumnName))
FROM MyTable
WHERE DATEADD(day, -2, CONVERT(DATETIME, CONVERT(CHAR(8), MyColumnName))) < GetDate()
选择CONVERT(DATETIME,CONVERT(varchar(8),MyColumnName))
从MyTable
其中DATEADD(day,-2,CONVERT(DATETIME,CONVERT(CHAR(8),MyColumnName))
这就是我得到的错误:

从字符串转换日期和/或时间时转换失败。

请尝试:

CREATE TABLE IntsToDates(
    Ints INT
)

INSERT INTO IntsToDates
VALUES (20131210)
    , (20131209)

SELECT CAST(CAST(Ints AS VARCHAR(12)) AS DATE)
FROM IntsToDates
尝试:


您的列中至少有一个错误日期(可能是
9999999
20130231
或谁知道呢)。这就是当您选择错误的数据类型时发生的情况。您可以使用以下方法识别坏行:

然后您可以修复或删除它们

一旦你这样做了,你应该把桌子修好。将日期存储为整数绝对没有好处,但也有很多缺点

一旦以正确的格式存储了日期,查询就简单多了。我强烈建议将函数等应用于谓词的右侧,而不是将其应用于列(这会扼杀SQL Server有效利用该列上任何索引的能力,如果这是一种常见的查询模式,您应该具备这种能力)

选择MyColumnName
从dbo.MyTable
其中MyColumnName
您的列中至少有一个错误日期(可能是
9999999
20130231
或谁知道呢)。这就是当您选择错误的数据类型时发生的情况。您可以使用以下方法识别坏行:

然后您可以修复或删除它们

一旦你这样做了,你应该把桌子修好。将日期存储为整数绝对没有好处,但也有很多缺点

一旦以正确的格式存储了日期,查询就简单多了。我强烈建议将函数等应用于谓词的右侧,而不是将其应用于列(这会扼杀SQL Server有效利用该列上任何索引的能力,如果这是一种常见的查询模式,您应该具备这种能力)

选择MyColumnName
从dbo.MyTable
其中MyColumnName
我遇到了一个类似的问题,我需要将INT转换为DATE,并且需要满足0的值。这个案件陈述对我起了作用

CASE MySourceColumn
   WHEN ISDATE(CONVERT(CHAR(8),MySourceColumn)) THEN   CAST('19000101' AS DATE) 
   ELSE  CAST(CAST(MySourceColumn AS CHAR) AS DATE) 
  END
  AS MyTargetColumn

我遇到了一个类似的问题,我需要将INT转换为DATE,并且需要满足0的值。这个案件陈述对我起了作用

CASE MySourceColumn
   WHEN ISDATE(CONVERT(CHAR(8),MySourceColumn)) THEN   CAST('19000101' AS DATE) 
   ELSE  CAST(CAST(MySourceColumn AS CHAR) AS DATE) 
  END
  AS MyTargetColumn

如果值是int,请尝试
选择CAST(CAST(20131210作为VARCHAR(12))作为日期)
。是的,但它在我的2012上有效。请尝试拆分字符串。如果值是int,请尝试
选择CAST(CAST(20131210作为VARCHAR(12))作为日期)
。是的,但它在我的2012上起作用。尝试拆分字符串。
CASE MySourceColumn
   WHEN ISDATE(CONVERT(CHAR(8),MySourceColumn)) THEN   CAST('19000101' AS DATE) 
   ELSE  CAST(CAST(MySourceColumn AS CHAR) AS DATE) 
  END
  AS MyTargetColumn