日期转换 varchar(10)
Posted
技术标签:
【中文标题】日期转换 varchar(10)【英文标题】:Date Convert varchar(10) 【发布时间】:2014-01-02 16:11:10 【问题描述】:我有两个包含日期的表,表 1 中的数据类型是 (datetime, null)。表 2 中的数据类型是 varchar(10)。我正在尝试编写一个查询,该查询将匹配每个表中的两个日期和标签,如果它们正确或不基于 macth。我已经复制了下面的查询,但我总是无法使用转换语法,我正在尝试获取 DD/MM/YYY
。我会感谢任何人帮助我将正确的语法包裹在日期列周围。
Select TBL1.ID,
TBL1.AccountName,
TBL1.StartDate,
TBL2.StartDate,
CASE
WHEN LEFT(TBL1.StartDate,10) = TBL2.StartDate THEN 'Correct' ELSE 'Incorrect' END AS 'Date Check'
FROM TBL1
INNER JOIN TBL2 ON TB1.ID = TBL2.ID
GROUP BY TBL1.ID,
TBL1.AccountName,
TBL1.StartDate,
TBL2.StartDate
【问题讨论】:
您的 varchar(10) 日期以哪种格式存储 CONVERT(datetime,TBL1.StartDate) 而不是 LEFT(TBL1.StartDate,10) 您最好将 varchar 更改为日期时间以进行比较。如果该字段中的任何内容不是有效的格式日期,它将显示您。 为什么人们坚持将日期存储为字符串?停止那样做。 相信我,Aaron 我已经要求我们的 DBA 更改数据类型,但他们不会,而且他们不会允许我自己更改数据类型。 【参考方案1】:CONVERT(datetime,TBL1.StartDate)
而不是
LEFT(TBL1.StartDate,10)
Left 将为您生成一个字符串,但您需要一个日期时间类型来生成 =。
【讨论】:
感谢 Peter,我尝试将 LEFT 更改为 Convert 并得到以下结果:Msg 242, Level 16, State 3, Line 1 varchar 数据类型到 datetime 数据类型的转换导致超出范围的值。 请试试@mhasan 所说的:CONVERT(VARCHAR(11),TBL1.StartDate,103)【参考方案2】:试试这个
CONVERT(varchar(10),Date,103) as StartDate
改为LEFT(TBL1.StartDate,10)
【讨论】:
【参考方案3】:为了正确比较日期,您首先需要将 varchar 类型转换为相应的日期时间表示,然后将两个日期日期转换为通用格式,然后进行比较。
所以改变
LEFT(TBL1.StartDate,10) = TBL2.StartDate
到
CONVERT( varchar(11),TBL1.StartDate,101) = CONVERT(varchar(11),CAST(TBL2.StartDate as DATETIME),101)
将 varchar 列 TBL2.StartDate 转换为 datetime 将检查有效的日期值,如果输入了无效的日期值,则会抛出错误。
还可以使用 dd/mm/yyyy 格式获取日期列
Select
CONVERT(VARCHAR(11),TBL1.StartDate,103),
CONVERT(VARCHAR(11),TBL2.StartDate,103)
More detailed format list here . I suggest bookmarking it,very helpful
【讨论】:
以上是关于日期转换 varchar(10)的主要内容,如果未能解决你的问题,请参考以下文章