日期转换 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(T​​BL1.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)的主要内容,如果未能解决你的问题,请参考以下文章

SQLServer日期格式转换

SQL怎么把日期格式1990-01-01转换成1990年1月1日?

将 varchar2 转换为日期

sql日期格式转换

Sql日期时间格式转换

Sql日期时间格式转换