我已在<geoPos lat="24.569408d" lon="54.647884d"/>
数据类型字段
CREATE TABLE table1(
City CHAR(10),
Sales INT NOT NULL,
Sale_date DATE NOT NULL,
First_order INT NOT NULL
);
INSERT INTO table1 VALUES
("Paris",2000,'2018-01-02',1),
("Munich",2000,'2018-02-17',1),
("Paris",2000,'2018-03-31',2),
("Paris",1000,'2017-01-01',2),
("Paris",1000,'2017-02-02',1),
("Paris",1000,'2017-03-02',1),
("Paris",10000,'2018-01-02',2),
("Munich",1000,'2017-01-01',1);
我想从上面的字符串中获取Lat和Lon值为2列。
答案 0 :(得分:2)
转换为XML
并使用Value
方法。
这应该让你开始:
首先,创建并填充样本表(请在将来的问题中保存此步骤):
DECLARE @T AS TABLE
(
Col varchar(100)
)
INSERT INTO @T VALUES
('<geoPos lat="24.569408d" lon="54.647884d"/>'),
('<geoPos lat="20.573082d" lon="57.478468d"/>')
查询:
SELECT Col,
CAST(Col As XML).value('(geoPos/@lat)[1]', 'varchar(10)') As Lat,
CAST(Col As XML).value('(geoPos/@lon)[1]', 'varchar(10)') As lon
FROM @T
结果:
Col Lat lon
<geoPos lat="24.569408d" lon="54.647884d"/> 24.569408d 54.647884d
<geoPos lat="20.573082d" lon="57.478468d"/> 20.573082d 57.478468d
请注意我使用了varchar(10)
,因为这是您使用的值中的字符数。如果您有更长的值,则需要更长的varchar。
此外,如果要在数据库中存储纬度和经度,SQL Server(自2008年起)支持spatial geography数据类型。我个人对此数据类型没有任何经验,因此我不会尝试演示如何使用它。