我有这个查询,它试图捕获日期末尾排除最后11个字符(字符串)。但是当我运行脚本时,它会返回不包含在字符串中的值,并且我会停留几天。
这是我的查询
select TOP 2 a.ACCOUNT,a.GPSDATE,
SUBSTRING(b.smsmsg, LEN(b.smsmsg) - 10, 6) [KM2]
from TblGPSCur a
inner join GPRSIN b on a.ACCOUNT = b.SMSFR
where exists(select * from GPRSIN b where b.SMSFR = a.ACCOUNT
and b.smsdt between '2014-10-27 14:00:00' and '2014-10-27 14:49:54')
结果就是这个
这是我试图解析的前2个数据
结果应为277511767.8
谁能告诉我在这个问题上我可能做错了什么?
答案 0 :(得分:0)
您的SUBSTRING()
设置不正确,应为:
SELECT SUBSTRING(b.smsmsg, LEN(b.smsmsg) - 11, 11)
由于起始位置为LEN(x) - 11
,您希望在该点之后有11个字符。
declare @SillyLongString as nvarchar(100)
set @SillyLongString = '1234567890a;s.a.dpoiuytghjkmnbvfg,277511767.8;'
select left(right(@SillyLongString, 12),11)
-- outputs: 277511767.8
这将选择12个最右边的字符,然后从该字符串中取出前11个字符。
添加到您的查询:
select TOP 2 a.ACCOUNT,a.GPSDATE,
left(right(b.smsmsg, 12),11) [KM2] ...
答案 1 :(得分:0)
您可以像这样使用SQL的RIGHT()
函数 -
SELECT TOP 2 a.ACCOUNT
,a.GPSDATE
RIGHT(b.smsmsg, 11) [KM2]
FROM TblGPSCur a
INNER JOIN GPRSIN b ON a.ACCOUNT = b.SMSFR
WHERE EXISTS (
SELECT *
FROM GPRSIN b
WHERE b.SMSFR = a.ACCOUNT
AND b.smsdt BETWEEN '2014-10-27 14:00:00'
AND '2014-10-27 14:49:54'
)