仅将年份和月份的字符串转换为...仅限年份和月份的日期格式

时间:2017-11-03 15:47:04

标签: sql sql-server datetime date-formatting

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

不太确定这可以做到,因为它不是一个完整的日期,但值得一提。

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  |

已经看过其他帖子,但它们都源于已经完整的约会,只是基本上减少了当年的月份等等。但在这种情况下,我只有一年和一个月,我有一个字符串,需要格式化为日期年和月

2 个答案:

答案 0 :(得分:1)

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

SQL Server(将ISO date YYYY-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' )

答案 1 :(得分:0)

您可以在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 )