SQL Server:将nvarchar类型转换为INT

时间:2018-10-17 12:44:13

标签: sql-server

我需要将具有如下所示值的NVARCHAR(MAX)列转换为INTEGER

我正在尝试此无效的代码:

SELECT CONVERT(INT, CriteriaValue) 
FROM OUTPUT_KEY 

表具有以下值:

£19,000,000
£10,000,000
£10,000,000

我收到此错误:

  

第245级状态1的23行
  将nvarchar值“£10,000,000”转换为数据类型int时,转换失败。

以下内容也不起作用

DECLARE @ConvertValue AS NVARCHAR(50)
SET @ConvertValue = '19,000,000'

SELECT CONVERT(INT, @ConvertValue) 

错误:

  

第245层状态1的州际25行
  将nvarchar值'19,000,000'转换为数据类型int时,转换失败。

4 个答案:

答案 0 :(得分:1)

Based on sample data & query, you need REPLACE() to make it work :

DECLARE @ConvertValue nvarchar(50)
SET @ConvertValue = '19,000,000'

SELECT CONVERT(INT, REPLACE(@ConvertValue, ',', '')) 

If the @ConvertValue has £ also , then you need one more REPLACE() :

SELECT CONVERT(INT, REPLACE(REPLACE(@ConvertValue, '£', ''), ',', ''))

答案 1 :(得分:1)

您尝试转换为整数的值包含逗号和井号。因此,SQL Server无法为您处理隐式转换。

您可以在此处阅读所有内容:

https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-conversion-database-engine?view=sql-server-2017

在此特定示例中,您需要在转换之前删除这些字符。如果您只有磅和逗号,这是使用嵌套替换的示例:

DECLARE @ConvertValue AS NVARCHAR(50);
SET @ConvertValue = '£19,000,000';
SET @ConvertValue = REPLACE(REPLACE(@ConvertValue, ',', ''), '£', '');

SELECT @ConvertValue;

如果您得到的数据类型是金钱,则SQL会为您隐式处理转换:

DECLARE @ConvertValue AS NVARCHAR(50);
SET @ConvertValue = '£19,000,000';
SELECT CONVERT(MONEY, @ConvertValue);

答案 2 :(得分:0)

您可以尝试类似的操作:

<div id="mytopnav" class="topnav">
  <div class="gradient-overlay></div>
    <a class="navitem" href="#">About</a>
    <a class="navitem" href="#">Packages</a>
    <a class="navitem" href="#">Features</a>
    <a class="navitem"href="#">Blog</a>
    <a class="navitem"href="#" id="contact">Contact</a>

由此,您将获得如何在表集上应用品脱:

.gradient-overlay {
 z-index: 2;
 width: 100%;
 background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 15%, rgba(0, 0, 0, 1) 85%, rgba(0, 0, 0, 0) 100%);
}

执行:

DECLARE @varchar nvarchar(max) = '£19,000,000';

WHILE PATINDEX('%[^0-9]%', @varchar) > 0 
    SET @varchar = REPLACE(@varchar, SUBSTRING(@varchar, PATINDEX('%[^0-9]%', @varchar), 1), '' ) 

SELECT [int] = CAST(@varchar as int)

答案 3 :(得分:0)

也许Money数据类型对您来说会更好

Declare @ConvertValue as nvarchar(50)
SET @ConvertValue = '$19,000,000'
SELECT convert (money, @ConvertValue)