【问题标题】:TSQL - Make Casting datetime as varchar not return friendly formatTSQL - 将日期时间转换为 varchar 不返回友好格式
【发布时间】:2015-02-05 14:47:52
【问题描述】:

我有以下疑问:

SELECT TOP 3 
    Person.Name AS PersonName,
    SUBSTRING(CAST(Person.BirthDate AS varchar(38)), 1, 2) AS CenteryBorn,
    Person.BirthDate AS CompleteDateTimeBorn
FROM Person     

我想要的是这样的,CenteryBorn 列有日期时间的前两位:

PersonName    CenteryBorn   CompleteDateTimeBorn

Fred          20            2000-03-16 00:00:00.000

Tim           19            1900-09-27 00:00:00.000

Jenny         19            1901-06-20 00:00:00.000 

然而我得到的是:

PersonName    CenteryBorn   CompleteDateTimeBorn

Fred          Ma            2000-03-16 00:00:00.000

Tim           Se            1900-09-27 00:00:00.000

Jenny         Ju            1901-06-20 00:00:00.000

完整的字符串表示似乎最终是Mar 16 2000 12:00AM

有什么方法可以将CAST 它作为一个字符串但采用默认格式而不是这种友好的格式?

【问题讨论】:

  • 看起来像本月的两个第一个字符。从 8 到 2 的子字符串。

标签: sql tsql datetime formatting substring


【解决方案1】:

如何使用:

YEAR(BirthDate)/1000

【讨论】:

  • 谢谢!但无论出于何种原因,当我尝试将其附加到另一个字符串时,这似乎不起作用,例如:“YEAR(BirthDate)/1000”+Person.RestOfDate
  • CAST(YEAR(BirthDate)/100 as VARCHAR(100))
【解决方案2】:

使用SELECT YEAR(Person.BirthDate) / 100 AS CenteryBorn

【讨论】:

  • 世纪将是( Year( Person.BirthDate ) + 99 ) / 100。第一个世纪是 1 到 100 年。20 世纪是 1901 到 2000 年。
  • 是的,你是对的,但我只是给出了 OP 在测试数据中想要的。此外他完全接受了不正确的答案:)
【解决方案3】:

你可以改用 datepart 函数

substring(cast(datepart(y,person.birthdate) as varchar),1,2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多