我有一个SQL查询
select substring(
replace(
replace(
replace(
replace(
convert(varchar,sysdatetime(),121),
'-',''),
' ',''),
':',''),
'.','')
,1,18) as DATETIME
它生成18位数字当前数字,如201605011221374719
如何更改此查询以生成11位唯一数字?
答案 0 :(得分:0)
只需在查询中替换18到11:
select substring(replace(replace(replace(replace(convert(varchar,sysdatetime(),121),'-',''),' ',''),':',''),'.',''),1,11) as DATETIME
答案 1 :(得分:0)
我希望围绕span
的{{1}}函数可以实现您的需求。
尝试以下查询
right()
答案 2 :(得分:0)
NEWID()对你不起作用?它是独一无二的,但比你所要求的数字更多。
你可以使用NEWID(),然后只取前11位数字(不确定这是否足够独特)。
select right(cast(rand(checksum(newid())) as decimal(15, 15)), 11)
答案 3 :(得分:0)
如果您使用的是sql server 2012或更高版本,则可以使用内置的FORMAT功能:
-- 123456789-12345678
SELECT FORMAT(SYSDATETIME(), 'yyyyMMddHHmmssffff') -- 18 digits
SELECT FORMAT(SYSDATETIME(), 'dHHmmssffff') -- 11 digits
对于早期版本(2008 r2及更低版本),您只需更改子字符串的值 - 从第8个字符获取子字符串:
select substring(
replace(
replace(
replace(
replace(
convert(varchar,sysdatetime(),121),
'-',''),
' ',''),
':',''),
'.','')
,8,11) as DATETIME
请注意,通过减少位数,您也会减少数字的唯一性 - 而18位数在下一个10000年内是唯一的,11位数只是唯一的10天。更改为12位数将使其每月独一无二,并且更改为14位数将使其每年独一无二。