SQL 从字符串中提取值

标签 sql sql-server t-sql

如何从字符串中提取值?我正在尝试分成 3 个新列。城市、州和邮政编码的单独列。

我已经尝试过

select address2,
left(address2, charindex('',address2)-1)
from table

并且 ---当我尝试下面的代码时,我得到“传递给左侧或子字符串函数的长度参数无效”

,LTRIM(substring(a.Address2, CHARINDEX(' ', a.Address2)+1, CHARINDEX(' ', substring(a.address2, charindex(' ',
a.address2)+1, len(a.address2)))-1))

我可以使用以下代码来划分城市(西沃里克除外),但不确定如何使其适用于州和邮政编码。这也消除了错误。

SUBSTRING(Address2,1,CHARINDEX(' ', a.address2+ ' ')-1) as city

有什么想法可以尝试吗?

enter image description here

最佳答案

看起来您的邮政编码和州的长度都相同。如果这是真的,你应该能够使用这样的东西:

SELECT
    LEFT(a.Address2,LEN(a.Address2) - 13) AS City,
    RIGHT(LEFT(a.Address2,LEN(a.Address2) - 11),2) AS State,
    RIGHT(a.Address2,10) AS Zip_Code
FROM
    table;

演示代码

创建表和数据:

CREATE TABLE MyTable (Address2 VARCHAR(100));

INSERT INTO MyTable
VALUES
    ('SAN DIEGO CA 92128-1234'),
    ('WEST WARWICK RI 02893-1349'),
    ('RICHMOND IN 47374-9409');

查询:

SELECT
    LEFT(Address2,LEN(Address2) - 13) AS City,
    RIGHT(LEFT(Address2,LEN(Address2) - 11),2) AS State,
    RIGHT(Address2,10) AS Zip_Code
FROM
    MyTable;

输出:

enter image description here

关于SQL 从字符串中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689864/

相关文章:

sql-server - SQL Server 将科学记数法(指数记数法)字符串转换为数字

c# - 从没有数据的查询中获取列名

sql-server - sql中如何将第二行移动到列?

mysql - sql基于2个参数连接表并更新2列

c# - 存储具有多个相同项目的集合

t-sql - 将 varchar(max) 转换为十进制时,将数据类型 varchar 转换为数字时出错

sql - 获取 1 :1 match between three fields on two tables

php - 左连接的 MySQL 查询问题

sql - 不使用 NewID() 的 SQL 上的随机数

php - 递归获取 parent 姓名