SQL Server, где поле является интервалом?

Это зависит от приложения и цели. Когда высокая доступность и производительность не очень важны, это не плохо к не разделить DB и веб-сервер. Особенно рассматривая увеличение производительности - если appliation делает большую сумму запросов базы данных, значительная сумма сетевой нагрузки может быть удалена путем хранения всего этого в той же системе, поддержания времени отклика на низком уровне.

5
задан Bill Karwin 4 September 2009 в 01:05
поделиться

3 ответа

select * from table
where column_value not like '[^0-9]'

Если разрешены отрицательные целые числа, вам понадобится что-то вроде

where column_value like '[+-]%' 
and substring(column_value,patindex('[+-]',substring(column_value,1))+1,len(column_value))
not like '[^0-9]'

. Вам понадобится больше кода, если значение_столбца может быть целым числом, превышающим пределы типа "int", и вы хотите исключить такие случаях.

2
ответ дан 15 December 2019 в 01:07
поделиться

Здесь, если вы хотите реализовать свою пользовательскую функцию,

CREATE Function dbo.IsInteger(@Value VARCHAR(18))
RETURNS BIT
AS 
BEGIN    
     RETURN ISNULL(     
         (SELECT    CASE WHEN CHARINDEX('.', @Value) > 0 THEN 
                            CASE WHEN CONVERT(int, PARSENAME(@Value, 1)) <> 0  THEN 0  ELSE 1 END  
                    ELSE 1 
                    END      
          WHERE     ISNUMERIC(@Value + 'e0') = 1), 0)

END

ISNUMERIC возвращает 1, когда ввод выражение оценивается как допустимое целое число, число с плавающей запятой, деньги или десятичный тип ; в противном случае он возвращается 0. Возвращаемое значение 1 гарантирует, что выражение может быть преобразовано в одно из эти числовые типы.

2
ответ дан 15 December 2019 в 01:07
поделиться

Я бы сделал UDF, как предлагает Светлозар Ангелов, но сначала проверил бы ISNUMERIC (и вернул бы 0, если нет), а затем проверил бы column_value% 1 = 0 , чтобы узнать, является ли это целым числом.

Вот как может выглядеть тело. Вы должны поместить логику по модулю в отдельную ветку, потому что она вызовет исключение, если значение не является числовым.

DECLARE @RV BIT
IF ISNUMERIC(@value) BEGIN
    IF CAST(@value AS NUMERIC) % 1 = 0 SET @RV = 1
    ELSE SET @RV = 0
END
ELSE SET @RV = 0
RETURN @RV
0
ответ дан 15 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: