Я знаю, что здесь много вопросов о преобразовании строк в целые числа в SQL, но я не смог заставить что-либо работать со значением, возвращаемым подстрокой. Я использую функцию подстроки, чтобы вернуть только числа из строки, чтобы я мог сравнить значения, но я получаю ошибку.
Ошибка преобразования типа данных nvarchar в цифры c.
Я попытался запустить следующее:
select
sy.ResourceID,
sy.ResourceType,
sy.Name0,
sy.SMS_Unique_Identifier0,
sy.Resource_Domain_OR_Workgr0,
sy.Client0,
Cast(Cast (substring(bio.SMBIOSBIOSVersion0,9,6)as Numeric(4,2)) as Int) as 'BiosVersion'
from v_R_system sy
inner join v_GS_FIRMWARE firm on firm.ResourceID = sy.ResourceId
inner join v_GS_COMPUTER_SYSTEM CS on cs.ResourceID = sy.ResourceId
inner join v_GS_PC_BIOS Bio on bio.ResourceID = sy.ResourceId
where firm.SecureBoot0 != 1 and cs.Model0 = 'HP EliteBook 840 G3'
Приведение к типу int округляет до 1
, когда оно должно быть 01.43
в зависимости от того, что получает подстрока. Когда я удаляю приведение как int и просто преобразую в число c, оно усекает его 1.42
. Когда я пытаюсь сравнить его со значением, которое я указываю, я все равно получаю ошибку, указанную выше.
select
sy.ResourceID,
sy.ResourceType,
sy.Name0,
sy.SMS_Unique_Identifier0,
sy.Resource_Domain_OR_Workgr0,
sy.Client0,
Cast(substring(bio.SMBIOSBIOSVersion0,9,6)as Numeric(4,2)) as 'BiosVersion'
from v_R_system sy
inner join v_GS_FIRMWARE firm on firm.ResourceID = sy.ResourceId
inner join v_GS_COMPUTER_SYSTEM CS on cs.ResourceID = sy.ResourceId
inner join v_GS_PC_BIOS Bio on bio.ResourceID = sy.ResourceId
where firm.SecureBoot0 != 1 and cs.Model0 = 'HP EliteBook 840 G3'
and Cast(substring(bio.SMBIOSBIOSVersion0,9,6)as Numeric(4,2)) < 01.42
Это проблема с моим сравнением или проблема с форматированием?
Продукт:
- Microsoft SQL Серверный стандарт (64-разрядный)
- Версия: 2016 (v13.0.4604.0)
- Язык: английский sh (США)
- Сортировка: SQL_Latin1_General_CP1_CI_AS