我正在尝试从字符串开头删除字符时找出最佳做法。
在某些语言中,您可以使用不带长度参数的MID,但在TSQL中需要长度。
考虑以下代码,最佳做法是什么? (十六进制字符串是可变长度)
DECLARE @sHex VARCHAR(66)
SET @sHex = '0x7E260F3DA734AD4BD816B88F485CE501D843DF067C8EDCB8AC7DAD331852E04D'
PRINT RIGHT(@sHex,LEN(@sHex) -2)
PRINT SUBSTRING(@sHex,3,LEN(@sHex) -2)
PRINT SUBSTRING(@sHex,3,65535)
答案 0 :(得分:21)
嗯,第一个更能表达你的意图。最后一个显然是凌乱的(硬编码长度等)。我怀疑你在第一个和第一个之间找到了很多性能差异。第二,所以我会使用最简单的 - RIGHT
。
当然,如果你这么做,你可以写一个封装了这个的udf - 如果你改变主意,你只有一个地方可以改变...
答案 1 :(得分:5)
在正确的功能上+1,你想要做的更清楚
答案 2 :(得分:4)
我会使用right
函数,因为它可以更好地显示您的意图。 substring
函数最适合用于从较长字符串的中间提取字符串。
答案 3 :(得分:2)
我使用第二个SUBSTRING因为它更便携。并非所有dbms都有LEFT和RIGHT。