重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
直接用估计没有,可以定义一个函数转一下,MSSQL中有个stuff函数
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网页空间、营销软件、网站建设、汶上网站维护、网站推广。
在指定位置替换或增加字符,比如:
SELECT STUFF('12345678', 2, 3, 'abc')
SELECT STUFF('12345678', 2, 0, ':')
但只能插入一个位置。
建议自定义一个字符串处理函数,然后在语句中调用吧
比如
create function dbo.fn_setColon (
@oldstr varchar(4000) )
returns varchar(4000)
as
begin
declare @outstr varchar(4000)
set @outstr=''
while (len(@oldstr)2)
begin
set @outstr=@outstr+left(@oldstr,2)+':'
set @oldstr=right(@oldstr, len(@oldstr)-2)
end
if @oldstr''
begin
set @outstr=@outstr+@oldstr
end
return @outstr
end
select dbo.fn_getColon('123456789')
第二种情况可以先把字符串中的字母替换掉,然后再调用该函数,建议还是通过前端程序来处理字符串。
在SQL SERVER 2005中,将表中字符串转换为数字的函数共2个:
1. convert(int,字段名) 例如:select convert(int,'3')
2. cast(字段名 as int) 例如:select cast('3' as int)
其实,一般情况下没有必要把字符串转换为数字类型
假如需要比较两个字段是否相等,但是一个字段为字符串类型,一个为数字类型,用“=”比较两个值是否相等时,SQL SERVER会自动把字符串转换为数字再比较的!
例如:
select da.TITLE_NAME,dsc.NAME
from dbo.DV_DUTY dd
inner join DV_SECOND_CLASS dsc on (dsc.ID=dd.AREA)
left join DV_ASSET da on(da.ID=dd.RECORD_ID and dd.TYPE='2')
where dd.AREA is not null
这个SQl中,inner join DV_SECOND_CLASS dsc on (dsc.ID=dd.AREA) 中dsc.ID为数字类型,dd.AREA为字符类型,相当于这样on(1='1')的判断,这时候就会自动吧字符串的'1'转换为数字类型再比较的。
但是也有弊端,一旦字符类型转换为数字类型出错(说明字符串的确就非数字组成的),SQL就会抛出异常。
SQL SERVER 2005中有判断字段是否为数字的函数:
ISNUMERIC(字段名) -----假如字段是数字类型返回1,不是就返回0
但是好像有的时候不好使,比如:select isnumeric('3,34') 就返回1
说明这个函数对字段值中全是数字但是数字间用“,”和“.”(逗号或点)隔开的都视为数字了!
字符串要打引号的,数值型才不用打,最直接的方法是把你这些字符串换成具体的内容自己拼接一下检查,向你上面的string strsql="select * from jpsx_ddl where class= 城市"; 而城市是个字符串,所以要加单引号string strsql="select * from jpsx_ddl where class=' " + cls + " ' ";
以上回答你满意么?
如楼上给的 单独分割一部分 也可用下面的函数 分割出一个集合
-- 1.0 拆分字符串 参数 @strSource要操作的字符串 @strSeparator分隔符
CREATE FUNCTION [dbo].fn_splitStr( @strSource NVARCHAR(4000),@strSeparator NVARCHAR(10) )
RETURNS @tbResult TABLE(id INT IDENTITY(1,1),rs NVARCHAR(1000))
AS
BEGIN
DECLARE @dwIndex INT,@strResult NVARCHAR(1000),@dwSeparatorLen INT=LEN(@strSeparator);
SET @dwIndex = CHARINDEX(@strSeparator,@strSource);-- 取得第一个分隔符的位置
WHILE @dwIndex0
BEGIN
SET @strResult = LEFT(@strSource,@dwIndex-1);
INSERT @tbResult VALUES(@strResult);
--将要操作的字符串去除已切分部分
SET @strSource = SUBSTRING(@strSource,@dwIndex+LEN(@dwIndex),LEN(@strSource));
SET @dwIndex = CHARINDEX(@strSeparator,@strSource); --循环量增加
END
--处理最后一节
IF LEN(@strSource) 0 INSERT @tbResult VALUES(@strSource)
RETURN;
END
GO
返回字符串在表达式expression里第一次出现的位置,起始值从1开始算,没找就返回0
描述一下此函数的具体用法:
'%pattern%' 的用法类似于 like '%pattern%' 的用法,也就是模糊查找其pattern字符串是否是expression找到,找到并返回其第一次出现的位置。
查找pattern的结束所在expression的位置,也就是从后面匹配起查找。
查询pattern首次出现的位置。
返回0,开头找不到就返回0,后面无论有多少都不管。
这就相当于精确匹配查找,也就是pattern,expression完全相等。
[] 是指定某些特殊的字符。
[^] 除[]之外的字符串。