【问题标题】:Date Conversion in SQLSQL中的日期转换
【发布时间】:2016-06-18 09:39:35
【问题描述】:

我的数据库中有以下格式的日期。

10/16 - mm/yy

我需要将其转换为:

October/16

这可能吗?

如果不可能,请告诉我原因。

【问题讨论】:

  • 或许了解数据库会对我们有所帮助!
  • 你在用什么rdbms
  • 我使用的是 SQL Server 2014。
  • 为什么将日期存储为字符串?为什么要从一个字符串转换为另一个字符串?为什么不直接使用原生 DATE 数据类型?
  • 是的,我使用的是字符串格式,因为所有数据都是从旧数据库导入的。我们需要唯一的格式。

标签: sql datetime time sql-server-2014


【解决方案1】:

这不是日期,它缺少日期,这是存储年/月的不好方法。应该有一个 4 位数的年份以避免混淆,并且应该首先列出年份以启用正确排序,例如'2016/10' 或数值 201610

您可以先将其转换为 DATE,然后使用 FORMAT 仅显示月/年:

set dateformat myd;
select format(cast(mystupidcolumn + '/1' as date), 'MMMM/yy') 

或 SUBSTR 月份部分并使用 CASE。

【讨论】:

    【解决方案2】:

    试试这个格式,

    SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
    

    【讨论】:

      【解决方案3】:

      您可以使用此代码显示日期

      select datename(month, YourColumnName) + '/' + right(YEAR(YourColumnName),2) 
      FROM   yourTableName
      

      只需将yourColumnName 更改为表格列的名称,将yourTableName 更改为表格的名称。

      【讨论】:

      • 从字符串错误转换日期和/或时间时,我得到此转换失败..
      【解决方案4】:

      是的,你可以,这取决于你用来调用日期函数的数据库 如果你列日期时间格式

      • SQL 服务器DATENAME(Month, GETDATE())
      • MySQL 数据库MONTHNAME(now())

      否则 将它转换为您选择的数据库或您的代码逻辑 拆分值并在月份查找 enum 或伪造要接受的日期并完成日期格式,如 01/10/16

      所以做类似SELECT DATENAME(Month, datecolumn) + '/' + YEAR (datecolumn)的事情

      您也可以使用 Year 函数 DATEPART(yy,datecolumn) 代替 你用格式做的方式看起来像 CONVERT(VARCHAR(11),GETDATE(),106) 但除了获得月份的前 3 个字符 JUN

      【讨论】:

      • 我更新了答案希望对您有所帮助,请注意不使用日期格式功能
      • 从字符串转换日期和/或时间时转换失败。我认为这个日期格式的错误只有两部分。
      • 是这个列日期时间的日期类型,我想不是,我会相应地更新我的答案
      • 是的,该列是 nvarchar。
      • 在将其转换为日期时间之前,像 1/10/16 一样为您的列连接一天,但我认为您的数据库有点像 2016-06-16
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多