Попытка использовать CASE WHEN и ISNUMERIC - PullRequest
0 голосов
/ 08 мая 2020

Итак, я пытаюсь проверить идентификатор столбца в таблице tableId, который имеет следующее

|id|
12345678
0012345678
A12345
B12345

Я пытаюсь создать второй столбец с именем id2, который будет :

|id2|
12345678
12345678
A12345
B12345

Чтобы я мог знать, после использования COUNT + DISTINCT, что есть дубликаты, у которых просто осталось 0 единиц номера, но на самом деле это те же идентификаторы.

Я пытался использовать CASE WHEN с ISNUMERI C и CAST как numeri c, как своего рода управление ошибками, которое возвращает одно и то же значение (те, которые имеют нечисловые символы c, такие как последние 2) в случае, если это не numeri c, и, если это так, он преобразует его в numeri c и вернет значение numeri c без нулей слева. Однако он возвращает ошибку

Error converting data type varchar to numeric.

Код:

select id,
        case when ISNUMERIC(id)=0 then id else CAST(id as numeric) end as id2
        from tableId

В Excel я бы использовал что-то вроде = IF (ISNUMBER (id), VALUE (id), id) ), но я не могу понять это правильно на SQL Server 2012.

Заранее спасибо!

D iego

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Используйте вместо try_cast():

select id, TRY_CAST(id as numeric) id2
from tableId
0 голосов
/ 08 мая 2020

Используйте приведенный ниже запрос, чтобы получить различное количество

select count(distinct( 
   case when try_cast(ID as numeric) is null 
         then ID else cast(try_cast(ID as numeric) as char) end)) as New_ID  
from your_Table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...