作者:手机用户2702934510 | 来源:互联网 | 2023-05-17 09:54
1、如何从一批手机号码中,选出最后4位不能含有“4”的号码,就是最后4位任意一位都不带有“4”这个号码,并且手机的前面7位必须是:1381508的所有号码。用like实现,晕,搞了半天,搞
1、如何从一批手机号码中,选出最后4位不能含有“4”的号码,就是最后4位任意一位都不带有“4”
这个号码,并且手机的前面7位必须是:1381508的所有号码。
用like实现,晕,搞了半天,搞不出来。我发出我写的sql:
SELECT *
FROM SystemNumber
WHERE (MobileNumber LIKE '1381508%') AND (MobileNumber NOT LIKE '%4444')
以上这句执行后,依然会输出尾数带'4'的号码
22 个解决方案
SELECT *
FROM SystemNumber
WHERE (MobileNumber LIKE '
%1381508%') AND (MobileNumber NOT LIKE '%4%')
楼上的在楼主的这种要求下是正确的,不过如果前7位带有4的话,则有问题了吧
SELECT *
FROM SystemNumber
WHERE (MobileNumber LIKE '1381508%') AND (MobileNumber NOT LIKE '%4%')
发果1381508这里面包函4的话,这个方法不行
应该是:
SELECT *
FROM SystemNumber
WHERE (MobileNumber LIKE
'1381508%') AND (RIGHT(MobileNumber) NOT LIKE '%4%')
Create Table test(tstr varchar(12))
Insert into test Select '13812334567' Union All
Select '13879635479' Union All
Select '13807968850' Union All
Select '13837006363' Union All
Select '13533896346' Union All
Select '13456807374'
Select * From test Where tstr like '%[^4][^4][^4][^4]'
Drop Table test
/*
tstr
------------
13807968850
13837006363
(所影响的行数为 2 行)
*/
纠正,我那个漏了一点点
SELECT *
FROM SystemNumber
WHERE (MobileNumber LIKE
'1381508%') AND (RIGHT(MobileNumber,4) NOT LIKE '%4%')
应该是正解吧
1、如何从一批手机号码中,选出最后4位含有“4”的号码,就是最后4位任意一位都可能带有“4”这个号码
语句如下:
select convert(bigint,phoneCode ) from tableName
where convert(bigint,phoneCode) like '%4___'
orconvert(bigint,phoneCode) like '%_4__'
orconvert(bigint,phoneCode) like '%__4_'
or convert(bigint,phoneCode) like '%___4'
现在的问题是,最后四位号码出现“4”的位置是由客户自己选择的,他可能要前面两位,也可能只要中间一位带4的,就是4的位置是不固定的,我应该怎么写呢???我已经做了4个文本框给客户选择,一般来说,客户不可能全部填写4的。
SELECT *
FROM SystemNumber
WHERE (left(MobileNumber,7)='1381508%') AND (RIGHT(MobileNumber,4) NOT LIKE '%4%')
现在的问题是,最后四位号码出现“4”的位置是由客户自己选择的,他可能要前面两位数带'4',也可能只要中间一位带4的,就是说4的位置是不固定的,我应该怎么写呢???我已经做了4个文本框给客户选择,一般来说,客户不可能全部填写4的。
其实,现在就是如何找个变量来代替安客户要求出现的4的位置
用户在选择号码时,尾数是由用户自己选择的,而且位置每次不一样,我该如何写这个sql语句/
生成一个变量sel4,该变量是按客户要求生成的,具体方法很好实现,然后:
SELECT *
FROM SystemNumber
WHERE (left(MobileNumber,7)='1381508%') AND (RIGHT(MobileNumber,4) LIKE '%"+sel4+"%')
楼上的大哥,你好,问题不是这么简单的。用户每次选的尾数可能四位全不一样,
比如,他要求 最后四位中,分别不能带有 4 2 7 1 这几个数,就是说,凡是最后四位为数全不能带有这些数的所有数据,列出来选。
楼主好象把问题给描述模糊了。到底是要选后四位不能带4的号还是什么?
选后四位不能带4
并且,最后的这些数字,要客户自己输入,不一定是4
SELECT *
FROM SystemNumber
WHERE (MobileNumber LIKE '1381508%') AND (CHARINDEX(MobileNumber,'4')<8)
各位大哥,真对不起,也许是我表达能力太差了,我再重复一下真实的问题:
现在页面上有四个文本框,用来给客户输入一些数字。输入的这些数字,将用来作为sql条件,列出所有的手机号码,但这些机号的最后四位,不包含客户输入的这些数字,因为这些数字是“不吉利”的号,用户在选手机号码时,当然不希望这些数字出现在最后4位中。
用户可以在这四个文本框中全部输入他认为不吉利的数字,不一定非要把4个文本框填全。可以写3个,也可以写2个或1个。
再根据条件列出所有尾数不包含这些数字的手机号码
不知用一句或几句sql语句能搞定???
麻烦了!
--我在SQL SERVER中测试了一下,是可以正确查询得,不过不同数据库方法会略有不同
select * from systemnumber where left(mobilenumber,7)='1381508' and right(mobilenumber,4) not like ('%4%')
CHARINDEX查询字符在列中的位置,只要最后四位没有‘4’就行了阿。
用这个
SELECT
*
FROM
SystemNumber
WHERE
LEFT(mobilenumber, 7) = '1381508' AND
SUBSTRING(RIGHT(mobilenumber, 4), 1, 1) <> @A AND
SUBSTRING(RIGHT(mobilenumber, 4), 2, 1) <> @B AND
SUBSTRING(RIGHT(mobilenumber, 4), 3, 1) <> @C AND
SUBSTRING(RIGHT(mobilenumber, 4), 4, 1) <> @D
@A, @B, @C, @D 就是你的文本框中用户填的值,不填,则是‘’