【问题标题】:MYSQL date_format '%x-%u' equivalent in SQL ServerSQL Server 中的 MYSQL date_format '%x-%u' 等效项
【发布时间】:2016-08-02 16:53:16
【问题描述】:

我在查询时遇到了问题。我有一个最初来自 MYSQL 的代码,但我将它迁移到了 Sql Server。现在我不知道 SQL SERVER 中是否有直接等效的 %x-%u 。

select date_format(date,'%x-%u') AS DATE from date_info WHERE Status = 1;

查询应返回 YEAR-WEEKNUMBER,其中 YEAR 是数据库中的年份,WEEK NUMBER 是取决于值的周数,星期一是一周的第一天。

数据库中date 的样本值为2008-01-05 09:48:03

我想得到2008-1的结果。

我在 SQL Server 中尝试了DATEPART 函数和FORMAT 函数,但仍然找不到我想要的解决方案。我发现使用DATEPART(ISOWK,date),但它只返回周数。

我想要2008-1 结果。

谁能帮我解决这个问题?

【问题讨论】:

    标签: mysql sql-server sql-server-2008


    【解决方案1】:

    尝试使用DATEPART()isowk 格式,它们应该返回一年中的第几周。

    SELECT cast(datepart(yyyy,[date]) as char(4)) + '-' + cast(datepart(isowk,[date]) as char(2)) AS DATE  as date
    FROM date_info
    WHERE Status = 1
    

    正如@ZoharPeled 在 cmets 中所说,此查询需要强制转换为 char ,这是有效的查询。

    【讨论】:

    • 尝试执行此操作,但它仅返回 2008。不是 2008-1。但是查询没有错误。 :) 怎么会这样?
    • 尝试将 cast as char(4) 添加到 year 并将 as char(2) 添加到 week:SELECT CAST(DATEPART(YEAR, [date]) as char(4)) +'-'+ CAST(DATEPART(ISO_WEEK, [date]) as char(2))
    • 这么近但这么远:-) 试试 SELECT cast(datepart(yyyy,date) as nchar(4)) + '-' + cast(datepart(isowk,date) as nchar(2) ) 作为 date_info 的日期 WHERE Status = 1; - 它将值解析为数字,而不是字符串。
    • @Sagi Sql 服务器不会将数字隐式转换为字符串,实际上是相反的——当字符串为数字时,它会在连接时隐式将字符串转换为数字。试试这个:SELECT 4 +'-3'+ 4。结果是5。当你这样做时:SELECT 4 +'-'+ 4 结果是8,因为'-' 被隐式转换为-0。在写这个问题的答案时我很惊讶地得知这一点(你咬了我一分钟),所以谢谢,因为你,我今天学到了一些新东西:-)。
    • 那就是我们两个:) @ZoharPeled
    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2011-04-30
    • 2023-03-07
    • 2020-07-22
    • 2015-03-27
    相关资源
    最近更新 更多