Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL替换函数_Sql_Pervasive - Fatal编程技术网

SQL替换函数

SQL替换函数,sql,pervasive,Sql,Pervasive,我想替换WHERE语句中第一个字符为S的字符 现在我所拥有的只有以下几点: WHERE i1.CODE = REPLACE(i2.CODE, 'S', 'U') 但这将用U取代所有S。仅当S是第一个字符时,我才希望将S替换为U 谢谢大家! Where i1.Code = Case When Substring( i2.Code, 1, 1) = 'S' Then 'U' + Substring( i2.C

我想替换WHERE语句中第一个字符为S的字符

现在我所拥有的只有以下几点:

WHERE i1.CODE = REPLACE(i2.CODE, 'S', 'U')
但这将用U取代所有S。仅当S是第一个字符时,我才希望将S替换为U

谢谢大家!

Where i1.Code = Case
                    When Substring( i2.Code, 1, 1) = 'S' 
                        Then 'U' + Substring( i2.Code, 2, Len( i2.Code ) )
                    Else i2.Code
                    End
另一种选择:

Where i1.Code = Case
                    When i2.Code Like 'S%'
                        Then 'U' + Substring( i2.Code, 2, Len( i2.Code ) )
                    Else i2.Code
                    End

正如ErikE所建议的,您还可以使用任意大的静态值替换
Len(i2.code)
,这可能会使速度略有提高。

免责声明:这确实非常难看,但我认为它是可行的

WHERE i1.CODE = REPLACE(LEFT(i2.CODE,1), 'S', 'U') + RIGHT(i2.CODE, LEN(i2.CODE)-1)
REPLACE(LEFT(i2.CODE, 1), 'S', 'U') + RIGHT(i2.CODE, LEN(i2.CODE)-1)

在这些情况下,我总是喜欢使用
8000
2147483647
而不是
Len
。从理论上讲,它应该使用更少的CPU,并使表达式更短。对不起,我没有遵循。。。8000是sql字符串函数的名称吗?@TherelmChitchConnors:否,8000是作为
RIGHT
的第二个参数,而不是
LEN
。在您的情况下,是的,应该精确计算要返回的子字符串的长度。但是,如果使用子字符串,可以将8000作为长度(如
子字符串(code,28000)
)。哎呀,对不起@therealmitch和@Andriy,我没有注意到它是
Right()
函数。。。是的,我的意思是使用
Substring
。在这些情况下,我总是喜欢使用
8000
2147483647
而不是
Len
。从理论上讲,它应该使用更少的CPU,并且使表达式更短。好的,谢谢你,它似乎正在运行,但速度很慢,但这没关系,因为这个语句只执行一次。只是为了测试,有没有一种方法可以限制UPDATE语句,使它只运行一定数量的行更新,这样我就可以测试它是否有效,而不是尝试对我的整个表(100k+行)运行它,然后发现结果不是我想要的,并且浪费了很多时间?thanks@seb:
TOP(n)
,如在SQL Server中,或
LIMIT n
,如在MySQL/PostgreSQL中,或任何其他等效的普及支持中。@seb如果您不确定它是否满足您的要求,请在
UPDATE
之前先作为
SELECT
语句执行,并带有“currentvalue”列和“newvalue”列,以便进行比较。您认为第一个子字符串是否优于
如'S%'
?@ErikE-好问题。也许没关系。这将取决于查询引擎是否能够智能地解析Case语句。不过,我会发布一个替代方案。