【问题标题】:conversion of datetime to getdate日期时间到 getdate 的转换
【发布时间】:2010-12-27 15:15:41
【问题描述】:

我在转换带有日期时间的列时遇到问题,需要转换为 getdate。

例如列 A (datetime, null),该列包含一些正确的 getdate 值,一些值具有类似“1900-01-01 15:32:00.000”的内容。我需要帮助将值更改为常规 getdate 值。并且该列中的某些字段也有 NULLS。

提前致谢, 沙什拉

【问题讨论】:

  • 1900-01-01 15:32:00.000 的实际值应该是多少? GetDate() 是一个非确定性函数,根据系统返回当前日期/时间。
  • "Getdate" 不是格式或数据类型的名称,而是每次调用时返回调用时间的函数的名称。那么,“转换为 getdate”是什么意思?
  • 你到底想做什么?将所有1900-01-01 的日期设置为当前日期和时间?忽略NULLS 和任何其他日期?
  • 请显示当前格式和想要的格式。
  • “常规 getdate 值”是什么意思? GETDATE() 是一个函数,它返回执行时的日期和时间。

标签: sql tsql


【解决方案1】:

一些事情:

GetDate() 是一个返回当前日期和时间的函数。是的,它包括当前时间。

您提供的示例看起来像是“纯”时间(即没有可用的日期组件)。如果那是真实数据,那么您会以某种方式获得该字段中记录的 0.#### 形式的十进制值。当然,您可能拥有该日期的真实数据,或者您可能刚刚为这个问题发明了这个例子。

最后,如果您真正想要的是摆脱时间组件以便拥有“纯”日期,请尝试 convert(datetime,convert(nvarchar(50),getdate(),101))。内部转换以 mm/dd/yyyy 形式创建文本,外部转换将其转换回 yyyy-mm-dd 00:00:00.000 形式的日期

【讨论】:

    【解决方案2】:
    • 如果您希望每次都不同,则不会存储 GETDATE() 的输出。 你会做SELECT col1, col1, GETDATE() AS Now FROM Mytable...

    • 如果没有诸如“上个月的任何事情都可以”之类的任意条件,就没有安全的方法来区分“真实”vakes 和“假”值。 “1900-01-01 15:32:00.000”是一个有效的日期时间值

    如果您的意思是“忽略只有时间位而不是日期(1900 年 1 月 1 日)的值,那该怎么办:

    SELECT 
      col1, col2, 
      CASE WHEN DateTimeCol <> '1900-01-01 15:32:00.000' THEN DateTimeCol ELSE GETDATE() END,
      CASE WHEN DateTimeCol > '1901-01-01' THEN DateTimeCol ELSE GETDATE() END,
      ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2017-06-07
      • 2013-08-18
      • 2014-09-18
      相关资源
      最近更新 更多