我正在使用地址字段中的门牌号码构建哈希值。我可以用什么SQL来选择varchar字段前面的数字字符?
EX:
12345 South 1st Street
我想要12345
。提前谢谢。
答案 0 :(得分:2)
declare @MyColumn as varchar(250)
set @MyColumn = '12345 South 1st Street'
select @MyColumn, cast(left(@MyColumn, patindex('%[^0-9]%', @MyColumn)) as int)
如果您不知道肯定会有数字,请按以下步骤添加CASE
语句以防止错误:
declare @MyColumn as varchar(250)
set @MyColumn = 'South 1st Street'
select @MyColumn as Address, case when patindex('%[^0-9]%', @MyColumn) = 1 then '' else left(@MyColumn, patindex('%[^0-9]%', @MyColumn)) end as StreetNumber
如果可能有前导空格,您可能还想添加LTRIM
:
declare @MyColumn as varchar(250)
set @MyColumn = ' 12345 South 1st Street'
select @MyColumn as Address, case when patindex('%[^0-9]%', ltrim(@MyColumn)) = 1 then '' else left(ltrim(@MyColumn), patindex('%[^0-9]%', ltrim(@MyColumn))) end as StreetNumber
答案 1 :(得分:0)
您是否认为数字字符后面会有空格,并且始终会有数字字符?
DECLARE @addr VARCHAR(100)
SET @addr='12345 South 1st St'
SELECT SUBSTRING(@addr,0,CHARINDEX(' ',@addr))
答案 2 :(得分:0)
DECLARE @TestVal VARCHAR(100)
SET @TestVal = '12345 South 1st Street'
SELECT
CASE
WHEN @TestVal LIKE '% %' THEN LEFT(@TestVal , CHARINDEX(' ', @TestVal ) - 1)
ELSE @TestVal
END
如果值不包含空格,或者为空,则此功能也可用。
如果您想要完全像您要求的那样(只有字符串前面的数字字符),那么试试这个。例如'MyHouseName,SomeStreet'将返回'',因为它没有门牌号码。 '12A Flat,SomeStreet'将返回'12'。这听起来并不理想,但正如你特别说的“数字”字符,我已经扩展到这个替代方案:
DECLARE @TestVal VARCHAR(100)
SET @TestVal = '12345 South 1st Street'
SELECT CASE
WHEN @TestVal LIKE '[0-9]%' THEN
CASE
WHEN @TestVal LIKE '%[^0-9]%' THEN LEFT(@TestVal, PATINDEX('%[^0-9]%', @TestVal) - 1)
ELSE @TestVal
END
ELSE '' END
答案 3 :(得分:0)
SELECT LEFT(address, INSTR(address, ' ') - 1) FROM address_table
找到第一个空格的位置并抓住它左边的文字。