【问题标题】:TSQL DatePart Week in ww format 01 instead of 1ww 格式的 TSQL DatePart Week 01 而不是 1
【发布时间】:2016-10-06 05:57:46
【问题描述】:

从格式为 01 02 03 04 05 而不是 1 2 3 4 5 的日期获取星期的最佳方法是什么?

【问题讨论】:

    标签: sql sql-server tsql week-number datepart


    【解决方案1】:

    最简单的方法是连接前导0s,然后取最右边的两个值:

    select right(concat('00', DATEPART(week, getdate())), 2) as WeekNum
    

    您不需要为此使用 udf...

    【讨论】:

      【解决方案2】:

      请查看SQL left padding function如何实现如下

      DECLARE @Dt datetime
      SELECT @Dt='01-21-2008'
      SELECT dbo.udfLeftSQLPadding( CAST( DATEPART(wk, @Dt) AS NVARCHAR),2,'0')
      

      函数将 Replicate() 与 Right() 等其他函数一起使用,如下所示

      SELECT RIGHT(Replicate('0', 2) + CAST( DATEPART(wk, @Dt) AS NVARCHAR), 2)
      

      这是输出

      【讨论】:

      • 这就是你想要的吗??
      【解决方案3】:

      DATEPARTRIGHTSTUFF的基本方式:

      DECLARE @d date = '2016-01-01'
      
      SELECT RIGHT(STUFF(DATEPART(week,@d),1,0,'0'),2)
      

      输出:

      01
      

      STUFF 在周数前添加0,然后RIGHT 从右侧减少2 个字符。

      【讨论】:

        【解决方案4】:

        你也可以连接字符串

        SELECT CASE WHEN DATEPART(week,@d) < 10 THEN '0' ELSE '' END +  DATEPART(week,@d)
        

        【讨论】:

          【解决方案5】:

          比 dbo.udfLeftSQLPadding 更快、性能更好的替代方案是具有相同逻辑的内联表值函数。它看起来像这样:

          CREATE FUNCTION dbo.iTVFLeftSQLPadding 
          (
            @String      varchar(100),
            @Length      smallint,
            @PaddingChar char(1) = '0'
          )
          RETURNS TABLE WITH SCHEMABINDING AS RETURN 
          SELECT newstring = RIGHT(REPLICATE(@PaddingChar, @Length) + @String, @Length);
          

          您可以在此处了解有关此技术的更多信息:http://www.sqlservercentral.com/articles/T-SQL/91724/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-13
            • 2020-07-25
            • 2013-01-16
            • 2015-01-07
            • 2023-02-22
            • 1970-01-01
            相关资源
            最近更新 更多