2014-10-07 40 views
0

我有一個表具有以下格式SQL rand()依賴於另一列?

id cityname  user 
1 newyork  a 
2 newyork  b 
3 newyork  c 
4 denver   d 
5 colorodo  e 
6 colorodo  e 

我需要添加與被使用蘭特(隨機生成的名稱版本的新列)和它應具有相同的值類似城市名

id cityname  user version 
1 newyork  a 1111111.11 
2 newyork  b 1111111.11 
3 newyork  c 1111111.11 
4 denver   d 7845156.12 
5 colorodo  e 8765589.12 
6 colorodo  e 8765589.12 

我如何獲得一組類似的隨機值。

請幫忙。

+1

什麼RDBMS(SQL *味*)你使用? – 2014-10-07 01:54:42

+1

這聽起來更像是一個散列... – Mitch 2014-10-07 01:58:47

回答

0

正如@米奇提到的,你可以把它作爲CHECKSUM 你可以把它作爲計算列,以便在INSERTUPDATE它會自動計算

ALTER TABLE tableA ADD version AS CHECKSUM(CityName) PERSISTED 
+0

謝謝@Mitch,Rajesh。對我很有幫助。 我使用Abs爲了避免負值 ALTER TABLE tableA ADD版本AS ABS(CHECKSUM(CityName))PERSISTED – SQLGirl 2014-10-07 02:45:06

+0

此外,有沒有什麼辦法可以使用校驗和來限制數字位數爲6? – SQLGirl 2014-10-07 02:45:32

+0

@SQLGirl,校驗和是一個整型數據類型 – radar 2014-10-07 02:50:07

1

如果您使用的是SQL Server 2008或更高版本,則可以使用CHECKSUM函數。請記住,您可能會碰到4字節的散列。

SELECT *, CHECKSUM(CityName) as Version 
FROM Cities 

對於東西有點不太可能有衝突,你可以使用HASHBYTES

SELECT *, HASHBYTES('SHA1', CityName) as Version 
FROM Cities 

對於MySQL,你可以使用任何encryption functions的,並採取子:

SELECT *, LEFT(SHA1(CityName), 8) as Version 
FROM Cities 

或者,只是使用整個散列來進行一些較重的碰撞保護。大多數其他RDBMS具有相似的散列函數。

+0

+1爲好的細節 – radar 2014-10-07 02:15:56