【问题标题】:Convert string with Year and Month ONLY... to the date format for Year and Month only仅将带有年份和月份的字符串转换为仅适用于年份和月份的日期格式
【发布时间】:2017-11-03 15:47:03
【问题描述】:

有点奇怪的问题,但我将年/月的行和行作为字符串,我正在尝试将其转换为日期格式。

不太确定这是否可以完成,因为它不是一个完整的日期,但值得一问。

UPDATE table
SET [Year Month] = CONVERT (DATE, [Year Month], 103)

返回

Conversion failed when converting date and/or time from character string.

数据字符串如下所示:

|Year Month|
| 2015-02  |
| 2016-06  |
| 2016-01  |
| 2020-09  |

看过其他帖子,但它们都源于已经有了完整的日期,并且基本上只是截断日期以获取年份月份等,但在这种情况下,它是我作为字符串的唯一年份和月份,并且需要格式化成日期年月

【问题讨论】:

  • 您想要的日期是几号? 01 或月底?还是别的什么?
  • 什么版本的 SQL Server? select @@version
  • 我只想返回上面相同的数据,但将其替换为日期格式而不是字符串
  • Microsoft SQL Server 2016 (SP1-GDR) (KB4019089) - 13.0.4206.0 (X64) Jul 6 2017 07:55:03 版权所有 (c) Microsoft Corporation Express Edition(64 位)跨度>
  • @VS1SQL 为了让它成为DATE,它必须是一个有效的日期。并且有效日期已定义day

标签: sql sql-server datetime date-formatting


【解决方案1】:

您需要选择一天(此处为每月的第一天)将包含一对 year/month 的文本字段转换为有效的日期字段:

SQL Server(将ISO dateYYYY-MM-DD、YYYY/MM/DD、YYYYMMDD...转换为日期):

UPDATE table
SET [Year Month Day] = cast([Year Month] + '-01' as DATE )

Oracle(您可以明确选择格式):

UPDATE table
SET YearMonthDay = TO_DATE(YearMonth || '-01', 'YYYY-MM-DD' )

【讨论】:

    【解决方案2】:

    您可以从 SQL Server 2012 开始使用 DATEFROMPARTS,但您必须指定日期才能使其成为 DATE

    --set to first day of month
    UPDATE table
    SET [Year Month] = DATEFROMPARTS ( LEFT([Year Month], 4), RIGHT([Year Month], 2) , 1 ) 
    

    示例

    DECLARE @Year_Month VARCHAR(7) = '2015-02'
    
    SELECT DATEFROMPARTS ( LEFT(@Year_Month, 4), RIGHT(@Year_Month, 2) , 1 ) 
    

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多