2015-05-22 5 views
2

У меня есть таблица, где значение версии является NVARCHAR, а не целого числа, так когда я использую больше, чем заявление он не отходил правильные данныеПреобразовать NVARCHAR в целое число в SQL

Я пытаюсь преобразовать версию в целом, но я получаю сообщение об ошибке, пожалуйста, помогите получила

Declare @dversion int; 

set @dversion = (select convert(int, displayversion) from Inv_AddRemoveProgram where DisplayName like 'Symantec Enterprise Vault%') 

select distinct v1.name, v1.[user], t1.displayname, @dversion from vComputer v1 

inner join Inv_AddRemoveProgram t1 
on v1.Guid = t1._ResourceGuid 

where t1.DisplayName like 'Symantec Enterprise Vault%' 

and @dversion > '10.0.17573' 

ошибки: Msg 245, уровень 16, состояние 1, строка 3 конверсии удалась при преобразовании значения NVARCHAR '10 .0.17573' для типа данных Int.

Я также пытался писать два простых запросов, чтобы преобразовать значение версии в этой таблице, которая также не работала

select displayname, CONVERT(INT, displayversion) from Inv_AddRemoveProgram 

Error: Msg 245, Level 16, State 1, Line 1 
Conversion failed when converting the nvarchar value '3.1.05160' to data type int. 

select displayname, CAST(displayversion AS INT) from Inv_AddRemoveProgram 

Error: Msg 245, Level 16, State 1, Line 1 
Conversion failed when converting the nvarchar value '3.1.05160' to data type int. 
+0

также сообщение об ошибке имеет ключ в нем, '10.0.17573' не является целым числом, и вы не может преобразовать это значение в целое. –

+0

Вам нужно удалить '.' из строки. Возможно, вам нужно разбить их на «Major», «Minor», «Micro»? – christiandev

+0

'3.1.05160' Не является целым или числовым типом любого типа, потому что существует более 1 периода'. 'Если вы хотите отображать каждую цифровую строку в строке как int, вам придется разбить строку вверх по периодам затем конвертировать каждую запись в int. Или используйте предложение @ christiandev и удалите все периоды. –

ответ

0

Похоже, ваш вопрос может быть то, что вы пытаетесь преобразовать поплавок к междунар , Или, на самом деле, я не уверен, что это за номер «3.1.05160». Вероятно, даже не плавающий с двумя десятичными знаками.

Если вы хотите устроить такое поле, я думаю, вам нужно разбить это число на 3 части и преобразовать каждый из них в числа и порядок на них?

0

Вам нужно ввести int где clausule. Попробуйте это:

and @dversion > CAST(replace('10.0.17573', '.', '') as int) 
0

Попробуйте это:

DECLARE @t TABLE (v NVARCHAR(20)) 
INSERT INTO @t 
VALUES ('10.0.17573'), 
     ('10.1.17573'), 
     ('10.0.1753'), 
     ('12.3.17573'), 
     ('11.0.17573'), 
     ('9.0.17573'), 
     ('9.20.17573') 

SELECT * 
FROM @t 
WHERE CAST(PARSENAME(v, 3) AS INT) > CAST(PARSENAME('10.0.17573', 3) AS INT) 
     OR (CAST(PARSENAME(v, 3) AS INT) >= CAST(PARSENAME('10.0.17573', 3) AS INT) 
      AND CAST(PARSENAME(v, 2) AS INT) > CAST(PARSENAME('10.0.17573', 2) AS INT)) 
     OR (CAST(PARSENAME(v, 3) AS INT) >= CAST(PARSENAME('10.0.17573', 3) AS INT) 
      AND CAST(PARSENAME(v, 2) AS INT) >= CAST(PARSENAME('10.0.17573',2) AS INT) 
      AND CAST(PARSENAME(v, 1) AS INT) > CAST(PARSENAME('10.0.17573',1) AS INT)) 

Выход:

v 
10.0.17573 
10.1.17573 
12.3.17573 
11.0.17573 
Смежные вопросы