1

我有这张桌子

ope_autoventaid                         ope_name
1532ED72-A93C-4287-9EB9-D21AB936F62F    latitud:21.06906|longitud:-89.63837|timegps:2013-08-13 01:07:27
A9B74530-4058-40D8-8AE4-6C1E8ABB4F65    latitud:21.06907|longitud:-89.63825|timegps:2013-08-13 01:08:33
AC0F60D8-5CC6-4ED1-9DED-6C25E5F15031    latitud:21.069|longitud:-89.6383|timegps:2013-08-13 01:12:52

我怎样才能得到latitud,longitudtimegps?有时它们可​​能在 0 中,timegps 在 1900-01-01 但它们不能为空。

在生产服务器上,我不能创建存储过程、函数、视图或创建列/表,我只能运行查询。

有没有办法得到一些东西

select ope_autoventaid, latitud, longitud, timegps 
from mytable
4

2 回答 2

0

如果您不能创建任何存储过程等,那么除了使用 SUBSTRING 和 CHARINDEX 函数之外几乎没有什么可做的。下面的查询很脆弱,但会产生您正在寻找的内容。

SELECT ope_autoventaid,
SUBSTRING(ope_name, charindex('latitud:',ope_name)+8,
                    charindex('|longitud:',ope_name)-9)
    as latitud,
SUBSTRING(ope_name, charindex('longitud:',ope_name)+9,
                    charindex('|timegps:',ope_name)-9-charindex('longitud:',ope_name))
    as longitud,
SUBSTRING(ope_name, charindex('timegps:',ope_name)+8
                  , len(ope_name)-charindex('timegps:',ope_name))
    as timegps
FROM myTable; 
于 2013-08-13T20:21:47.523 回答
0
select t.ope_autoventaid,
    x.c.value('r[1]/@lat', 'float') latitud,
    x.c.value('r[1]/@long', 'float') longitud,
    x.c.value('r[1]/@tgps', 'datetime') timegps 
from [Table] t
    cross apply (
        select c=cast(replace(replace(replace(ope_name,
            'latitud:', '<r lat="'),
            '|longitud:', '" long="'),
            '|timegps:', '" tgps="') + '" />' as xml)) x
于 2013-08-13T21:55:38.233 回答