如何使用字符串和日期

时间:2016-04-29 19:51:11

标签: sql sql-server

我在sql server中有一个订单表,我需要订单号主键是这样的

OR\20160202\01

OR只是一个字符串 20160202是日期 01是当天的序列号

第二个订单记录当天

OR\20160202\02等等..

也应该包括反冲......

在sql server中创建这样一个字段的方法是什么(使用版本2016)

编辑:要为序列号添加更多上下文,它只是这个字段合成的一种方式或不是唯一的。没有序列号我将在DB中获得重复记录,因为我可以在同一天有很多记录,所以日期将保持不变,因此它会像

OR\20160202表示该特定日期的所有行,因此它会重复。添加"序列"数字有助于解决这个问题。

5 个答案:

答案 0 :(得分:0)

最好的方法是不在SQL中创建这样的列。您有效地将多个数据组合到同一列中,出于多种原因,这不应该发生在关系数据库中。列应该包含一个数据。

而是在所有必要的列上创建复合主键。

答案 1 :(得分:0)

复合pk
订单varchar(20)
orDate DateTime

select * 
     , row_number() over (partition by cast(orDate as Date) order by orDate) as seq  
from table 

关于如何连接数据,请留给你 这是介绍的事情 - 不要让它成为PK的问题

答案 2 :(得分:0)

关于"当天的序列号" (部门,年份,国家,......)。 几乎每次我与最终用户讨论这样的要求时,结果都只是误解了共享数据库的工作方式,模糊地尝试在共享数据库上重复旧的(单独的数据库,EXCEL文件甚至文书工作)技巧。 所以我第二次选择Tom H和其他人,首先尝试不要这样做。

如果你必须这样做,出于法律或其他不可思议的原因,我希望你在2012年以上。每天创建SEQUENCE。

答案 3 :(得分:0)

格式化PK不是一个好主意。复合键是一种更好的方法。应该使用day作为日期列和订单号作为bigint列的组合。这有助于提高查询性能。

答案 4 :(得分:0)

您可能想要探索“日期维度”'表。 Date Dimension是数据仓库中常用的表。它存储日历的所有日期(根据您选择的年份)和当前数字生成的密钥。在日期维度上查看此帖子。它讨论了在SQL SERVER中创建一个。

https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/