我想在 SQL Server 中生成一個 6 位數字,第一個數字允許為零。
為了生成一個隨機的 6 位數字,我使用以下代碼:
round(rand()*power(10,6),0)
為了確保它是一個 6 個字符的數字,我在此示例中使用:
format(12345,'D6')
回傳:
012345
但是當我使用下面的短語時,它會回傳NULL
select format(round(rand()*power(10,6),0),'D6')
我正在尋找原因,但我只知道甚至format(rand()*power(10,6),'D6')回傳 null,而format(round(power(10,3),0),'D6')回傳select format(power(10,3),'D6')答案。這表明問題既不是關于power()也不是round()。rand()功能是原因。
我使用這段代碼來解決我的問題:
declare @num int = round(rand()*power(10,6),0)
select format(@num,'D6')
但我只想知道為什么rand()在format()回傳null,我找不到原因。
如果您有任何想法,我將不勝感激。謝謝。
uj5u.com熱心網友回復:
該函式rand()*power(10,6)回傳一個浮點數。當您將其放入變數型別int時,您會強制轉換為 int。
我們可以用cast(.. as int)as in
select format(cast(rand()*power(10,6)as int),'D6')which 正常作業來做同樣的事情。(因為該值已經是一個整數,所以不需要使用round())
如果我們使用變數型別 float 我們會得到一個空值:
declare @num float = round(rand()*power(10,6),0) select format(@num,'D6')| (無列名) | | :--------------- | | 空 |
因此,當我們使用format()浮點數作為引數時,就會出現問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451033.html
上一篇:如何在存盤程序中概括JSON?
下一篇:sql合并同一張表中的行
