SQL语句查询,(100)

  • 主题发起人 主题发起人 jmlwz
  • 开始时间 开始时间
J

jmlwz

Unregistered / Unconfirmed
GUEST, unregistred user!
要求查字段字符串,连续三个数字中间哪个数字如J9S625 >求得 6 是单数JX123A >求得 2 是双数J397R1 >求得 9 是单数AB123G >求得 2 是单数这样的SQL语句应该怎么写
 
sql能吗?不能吧。用程序吧
 
sql不是万能的,虽然没有sql是万万不能的。要么通过程序来实现,要么写sql函数来实现。
 
写sql自定义函数吧。
 
J9S625 >求得 6 是单数 好像是2吧JX123A >求得 2 是双数J397R1 >求得 9 是单数AB123G >求得 2 是单数如果出现这样的情况该怎么办AB1233G?好像楼主没有考虑异常情况,我看只能是函数处理比较好!
 
ALTER FUNCTION dbo.ufn_GetNumber(@AData VARCHAR(256))RETURNS VARCHAR(50)AS BEGIN DECLARE @I INT; DECLARE @COUNT INT; DECLARE @ILEN INT; DECLARE @AValue VARCHAR(50); SELECT @COUNT = 0, @I = 1, @ILEN = LEN(@AData), @AValue = ''; WHILE (@I <= @ILEN) BEGIN IF (SUBSTRING(@AData, @I, 1) >= '0') AND (SUBSTRING(@AData, @I, 1) <= '9') SELECT @COUNT = @COUNT + 1; ELSE SELECT @COUNT = 0; IF (@COUNT >= 3) BEGIN SELECT @AValue = SUBSTRING(@AData, @I - 1, 1) BREAK; END; SELECT @I = @I + 1 END; RETURN SUBSTRING(@AData, @I - 1, 1); END;SELECT dbo.ufn_GetNumber(COLUMN_NAME) FROM TABLE_NAME
 
在大批量查询时会严重影响性能,建议在客户端做,不要用SQL来做。
 
to willing66:经过测试,可以达到要求,但是也存在问题,你的代码很值得学习,收藏了;问题在于:如果全部是数字..会正确返回值,但有些会得出奇怪的值;art_no,c_descr, 值388 花色无缝软抄 32K 40页 页-->error688 慧嘉花生酱5KG/桶 桶-->error333 LG温控烧烤微波炉 MG-5021SDV1 0 --> true
 
应该是我写漏了,我当时就想到这个问题,把这句 RETURN SUBSTRING(@AData, @I - 1, 1); END;改为 RETURN @AValue; END;
 
Thanks! Willing66
 
var aaa:integer;with adoquery1 dobegin adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add(' select 字段名, substring(字段名,4,1) as tablename from table1 '); adoquery1.open;endwhile not adoquery1.eof dobegin 在这里写个判断,如果能被2整除则是双数否则是单数。 adoquery1.next;end;
 
后退
顶部