首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SQL Server中,将varchar转换为date不会按预期工作

在SQL Server中,将varchar转换为date不会按预期工作
EN

Stack Overflow用户
提问于 2016-05-27 23:06:56
回答 1查看 52关注 0票数 0

我在SQL Server日期转换中遇到了一个特殊的问题。我有一个格式为:YYMM的日期。让我们称其为Date_To_Format

我编写了这个函数来将其转换为日期

代码语言:javascript
运行
复制
convert(varchar, concat('01', '-', Date_To_Format % 100, '-',
        case when Date_To_Format/100 between 60 and 99 
                then concat('19', cast(Date_To_Format / 100 as varchar)) 
                else concat('20', cast(Date_To_Format/100 as varchar)) 
         end), 5)

现在的问题是我需要找到这个月的最后一个日期。我尝试做一个dateadd来添加一个月,然后从其中减去一天。它总是在日期中添加一个月,而不是月份。

例如:我得到了01-10-2017dateadd(m,1,'01-10-2017')我得到了2017-02-10 00:00:00.0.

我只需要让SQL Server识别月份而不是日期。你能帮帮忙吗?如果你有任何问题请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2016-05-27 23:17:33

将date保存为date,而不是varchar。如果您使用的是SQL Server 2012或更高版本,请尝试以下操作:

代码语言:javascript
运行
复制
DECLARE @Date_To_Format nvarchar(4) = '1605'

SELECT      
    BeginningOfMonth = DATEFROMPARTS(@Date_To_Format / 100 + IIF(@Date_To_Format / 100 BETWEEN 60 AND 99, 1900, 2000), @Date_To_Format % 100, 1),   
    EndOfMonth = DATEADD(DAY, -1, DATEFROMPARTS(@Date_To_Format / 100 + IIF(@Date_To_Format / 100 BETWEEN 60 AND 99, 1900, 2000), @Date_To_Format % 100 + 1, 1))

DATEFROMPARTS是从SQL Server 2012开始提供的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37486803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档