簡體   English   中英

如何在 SQL 中將 nvarchar 轉換為十進制

[英]How to convert nvarchar to decimal in SQL

如何在 SQL Server 中將 nvarchar 轉換為十進制?

我需要將“ '38,716.1311'類的值轉換為 38716.1311。

我曾嘗試使用此方法但無法成功轉換:

DECLARE @TempValue NVARCHAR(100) = '38,716.1311'

SELECT 
    CONVERT(DECIMAL(18, 2), @TempValue) 

誰能建議正確的查詢? 提前致謝

只需在轉換前從字符串中刪除逗號:

Select CONVERT(DECIMAL(18,2),replace('38,716.1311', ',', '')) 
Declare @TempValue nvarchar(100)
    SET @TempValue = Replace('38,716.1311',',','')
Select cast(@TempValue AS DECIMAL(18,2)) 

-- 我們不能將像 "38,716.1311" (NVARCHAR) 這樣的值轉換為 DECIMAL 所以首先我們用空白 "38716.1311" 替換 "," 然后用 DECIMAL 轉換

使用 REPLACE 刪除逗號,如下所示:

Declare @TempValue nvarchar = '38,716.1311'
Select CONVERT(DECIMAL(18,2), REPLACE(@TempValue, ',', ''))

如果@TempValueMONEY則更好,因此它會忽略逗號分隔

Declare @TempValue MONEY =  '38,716.1311'
Select CAST(@TempValue AS DECIMAL(18,2))

使用 MONEY 數據類型並轉換為十進制數據類型:

DECLARE @Col MONEY = '38,716.1311'
SELECT CONVERT(DECIMAL(20,4),@Col) 

或替換逗號並轉換為十進制

DECLARE @Col VARCHAR(100)  = '38,716.1311'
SELECT CONVERT(DECIMAL(20,4),REPLACE(@Col,',',''))

以我為例,一些數據如下: version: '1.2.12'

我想在Sql中注冊類似版本:1.212

  1. 清理varchar (消除點或逗號)

  2. 轉換為字符(6 位)並用 0 填充空格。 (使用合並捕獲空值)

  3. 轉換為數字並除以 100000

  4. 轉換為十進制(10,4)

結果 ->> 版本 1.212

Select 'version'=cast(cast(replace(cast(replace(coalesce([##DATA##],'0'), '.', '') as char(6)),' ','0')as numeric(6))/100000 as decimal (10,4)

也許還有另一種更簡單的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM