【问题标题】:How to generate uniqueRowdate number for a datecolumn i?如何为日期列 i 生成 uniqueRowdate 编号?
【发布时间】:2014-03-06 03:48:08
【问题描述】:

我的表中有一个日期列,我需要为日期更改生成一个唯一的行日期。我使用了CONVERT(varchar(50),cast(product as DATE),112),但我没有得到唯一的日期。 我的表格如下所示。

Product 
02/22/2014
02/22/2014
02/22/2014
02/22/2014
02/23/2014
02/23/2014
02/23/2014
02/23/2014
02/23/2014
02/24/2014
02/24/2014
02/24/2014

输出看起来是

201402221
201402222
201402223
201402224
201402231
201402232
201402233
201402234
201402235
201402241
201402242
201402243

注意:我需要它,因为不应该匹配任何值。请帮助我,我使用上面的公式尝试了 80%,但我不知道为日期添加行号??

【问题讨论】:

    标签: sql tsql sql-server-2012 row-number date-conversion


    【解决方案1】:
    select concat(replace(cast(product as date), '-', ''),
                  row_number() over(partition by product order by product)) as prod_id
      from tbl
    

    SQL Fiddle 演示:http://sqlfiddle.com/#!6/0a526/7/0

    【讨论】:

      【解决方案2】:

      你可以使用 ROW_NUMBER()

      SELECT ROW_NUMBER() OVER( ORDER BY Product) AS rn, *
      FROM your_table  
      

      ROW_NUMBER() 函数会生成从 1 开始的计数。如果您想从某个任意值(例如 201402221)初始化计数,那么您可以将基本计数添加到计数列,如下所示:

      SELECT ROW_NUMBER() OVER( ORDER BY Product) + 201402220 AS rn, *
      FROM your_table 
      

      【讨论】:

      • :我不能使用行号或标识列,因为我的表有更多列。我需要获取数据号+行号是唯一的。
      【解决方案3】:
      declare @FromDate date = '2014-03-05'
      declare @ToDate date = '2014-12-31'
      
      select dateadd(day,rand(checksum(newid()))*(1+datediff(day, @FromDate, @ToDate)),@FromDate)
      

      【讨论】:

      • 我如何使用那个来生成 rowdatenumber 字符串?
      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      相关资源
      最近更新 更多