Проверьте значение Varchar числовое без переполнения - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть таблица с PostalCode Столбец этого типа Char(10), я использую следующий запрос Select:

SELECT [Fm].[Id], [Sdp].[FirstName], [Sdp].[LastName], [Sdp].[SSN],
[Sdp].[StoreName],
case when isnumeric([Sdp].[PostalCode]) = 1 then CONVERT(CHAR(10),[Sdp].[PostalCode]) 
else '0' end,  [Fc].[Id], [Sdp].[Address]

FROM [SRM].[SiteMembers].[DProfile] AS [Sdp]
INNER JOIN [SRM].[SiteMembers].[Member] AS [Sm]
ON [Sdp].[Member_Id] = [Sm].[Id]
INNER JOIN [FRM].[Members].[Member] AS [Fm]
ON [Sm].[UserId] = [Fm].[UserId]
INNER JOIN [SRM].[General].[City] AS [Sc]
ON [Sdp].[City_Id]=[Sc].[Id]
INNER JOIN [FRM].[General].[City] AS [Fc]
ON [Fc].[Title]=[Sc].[Title] 
COLLATE SQL_Latin1_General_CP1_CI_AS

При этом сценарии возникает ошибка переполнения потока:

Msg 248, Level 16, State 1, Line 2
The conversion of the varchar value '4153675759' overflowed an int column.

Я задаю вопрос здесь , и я не хочу возвращаться в прошлое с двумя сценариями, поэтому есть ли способ проверить, что PostalCode числовой (и я имею в виду числовой, а не int) без каких-либоошибка?

Ответы [ 3 ]

5 голосов
/ 21 февраля 2012

Если вы хотите проверить, что значение (n)(var)char состоит из цифр и только цифр, то будет работать просто двойной отрицательный LIKE:

PostalCode not like '%[^0-9]%'

, который будет истинным, только если нетне цифры в строке.

1 голос
/ 21 февраля 2012

Используйте

case 
    when [Sdp].[PostalCode] like '%[^0-9]%' 
        then 0 else CONVERT(CHAR(10),[Sdp].[PostalCode]) end
0 голосов
/ 06 марта 2013

Попробуйте BIGINT.Каждый из числовых типов данных имеет диапазон.Например, SMAIINT колеблется от +32767 до -32768.TINYINT колеблется от 0 до 255

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...