【问题标题】:How to transfer the Date Column with Format '/' to Format '-'? [duplicate]如何将格式为“/”的日期列转换为格式“-”? [复制]
【发布时间】:2019-06-26 07:10:02
【问题描述】:

我想将一个格式为“/”的日期列传输到“-”,例如,一个日期数据,如“10/19/2018 2:49:47 PM”,但我想要格式“2018-10” -19 14:49:47'。我尝试了以下操作,例如使用转换,但它似乎不起作用。

SELECT [LMDM_Data] ,convert(varchar(100),LMDM_Data,23) ,CAST(LMDM_Data as varchar(10)) FROM Table

结果如下:

LMDM_Data   (No column name)    (No column name)
10/19/2018 2:49:47 PM   10/19/2018 2:49:47 PM   10/19/2018

为了验证该列是否为Date,我使用isDate()函数检查,都返回1。

SELECT [LMDM_Data] ,ISDATE(LMDM_Data), convert(varchar(100),LMDM_Data,120) ,CAST(LMDM_Data as varchar(10)) FROM [ESS_NJ_LMDM_PDM].[dbo].[maintanence_workload]

结果如下:

LMDM_Data   (No column name)    (No column name)    (No column name)
10/19/2018 2:49:47 PM   1   10/19/2018 2:49:47 PM   10/19/2018

【问题讨论】:

  • Date has no display format. 只有日期的字符串表示具有显示格式。
  • 正如 GSerg 所写 - 如果您将日期存储为字符串,请停止这样做。阅读 Aaron Bertrand 的 Bad habits to kick : choosing the wrong data type 了解详情。
  • isDate() 如果得到的字符串可以转换为日期/日期时间,则返回 1,否则返回 0。该列的实际数据类型是什么?
  • @ZoharPeled Bingo,是varchar类型,可以转Date。
  • 那么你真的需要修复你的数据类型@Zoeric,然后让你的表示层担心格式。 10/19/2018 2:49:47 PM 不是“之后”06/26/2019 8:30:32 AM 也不是“之前”10/19/2018 9:21:01 AM;但这是根据你的数据。

标签: sql-server


【解决方案1】:

使用样式 120 (yyyy-mm-dd hh:mi:ss(24h))

CONVERT(VARCHAR,LMDM_Data,120)

请记住,这只会在 SELECT 查询中转换为 VARCHAR,而不是表中的实际数据。

更多格式请见CAST and CONVERT (Transact-SQL)

更新:

如果字段 LMDM_Data 的数据类型不是 DateTime,您需要将其转换为 DateTime,然后再更改格式,如下所示:

CONVERT(VARCHAR,CAST(LMDM_Data AS DATETIME),120)

但正如上面每个人所建议的那样,将日期存储在 VARCHAR 数据类型中根本不是一个好主意。您应该修复数据类型,而不是转换为日期时间。

【讨论】:

  • 还是不行……我改了好几种参数。
  • 这应该可以。见this example
  • 但是当我输入值'10/19/2018 2:49:47 PM'时,它仍然无法转换为带有'-'的格式。目标是'2018-10-19 14:49:47'
  • 检查更新。
  • 是的,当我转换列类型时,它现在可以工作了!
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 2015-08-16
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多