2015-04-16 5 views
1

Есть ли способ применить поле nvarchar в инструкции select на основе того, является ли оно числовым или нет. В настоящее время у меня есть этот код, но по какой-то причине он пытается преобразовать одно из числовых значений.SQL Бросок в select, основанный на значении

SELECT id, 
    CASE WHEN ISNUMERIC(field) = 1 THEN CAST(field AS INT) ELSE CAST(field AS NVARCHAR(10)) END AS [fieldName] 
    FROM table1 
+0

В столбце SQL имеется тип данных. Вы не можете смешивать типы данных в одном столбце. Может быть, вы можете использовать столбец SQL_VARIANT (просто думать) – CrApHeR

+0

Ответ, к сожалению, нет. В запросе возвращается один столбец с одним типом данных. Просить SQL Server вернуть два разных типа данных для одного столбца - это попросить мотоцикл с полным приводом. – AHiggins

+0

Существуют альтернативы, такие как преобразование значения в число в определенном формате, а затем преобразование его в значение nvarchar - можете ли вы описать, что именно вы пытаетесь выполнить здесь? Может быть, есть еще один способ, которым мы могли бы подойти к проблеме. – AHiggins

ответ

0

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

DECLARE @Table1 TABLE (Field NVARCHAR(10)) 

INSERT INTO @Table1 (Field) VALUES (1) 
INSERT INTO @Table1 (Field) VALUES (10) 
INSERT INTO @Table1 (Field) VALUES (100) 
INSERT INTO @Table1 (Field) VALUES (2) 
INSERT INTO @Table1 (Field) VALUES ('abv') 

SELECT 
    Field, 
    CASE 
     WHEN ISNUMERIC(Field) = 1 
     THEN RIGHT('000000000' + Field,10) 
     ELSE Field 
    END AS SortField 
FROM @Table1 
ORDER BY SortField DESC 

SELECT 
    Field, 
    CASE 
     WHEN ISNUMERIC(Field) = 1 
     THEN RIGHT('000000000' + Field,10) 
     ELSE Field 
    END AS SortField 
FROM @Table1 
ORDER BY SortField ASC 
+0

, но выглядит беспорядочно в datagridview. есть все же, чтобы скрыть некоторые из нулей, чтобы показать только последние 34 символа? –

+0

Вы можете задать длину, используя раздел 'RIGHT ('000000000' + Field, 10)' - измените количество нулей на все, что вам нужно, и 10 на нужный номер. – AHiggins

+0

Это сработало спасибо! Просто любопытно, как заполнители 0 сортируют строки, как если бы они были ints? –