gpt4 book ai didi

sql-server - TSQL 将地址转换为邮寄地址 - SQL Server 2005

转载 作者:行者123 更新时间:2023-12-02 17:53:57 26 4
gpt4 key购买 nike

我想将地址(Line1、Line2、Line3、城市、州、邮政编码)转换为没有空行且城市、州和邮政编码串联的邮寄地址(Addr1、Addr2、Addr3、Addr4)一起在一条线上。有一个函数可以做到这一点会非常好。


第1行=
Line2=123 某处
第3行=
城市=底特律
州=MI
zip =48000

这是传入地址的表结构:

IF OBJECT_ID('tempdb..#Employee') IS NOT NULL DROP TABLE #Employee
CREATE TABLE #Employee (Line1 VARCHAR(30), Line2 VARCHAR(30), Line3 VARCHAR(30),
City VARCHAR(17), State VARCHAR(2), ZIP VARCHAR(10))
GO

INSERT #Employee VALUES ('', '123 Somewhere', '', 'Detroit', 'MI', '48000')

SELECT * FROM #Employee

生成的邮寄地址

Addr1=123 某处
地址2=底特律 MI 48000
地址3=
地址4=

或一个带有cr字符的字段
地址=
123 某处cr
底特律 MI 48000 cr
cr
cr

一个函数最好能返回 Addr1、Addr2、Addr3 和 Addr4 或仅返回带有 的 Addr。

SqueezeAddress(线路 1、线路 2、线路 3、城市、州、邮政编码)
然后 SqueezeAddress 将返回 Addr1、Addr2、Addr3、Addr4

添加 cr 的地址

所有 Addr1-4 行都将为 VARCHAR (40),或者如果使用一个字段,则为 Addr VARCHAR (200)

根据 Phil 在下面评论中的请求,以下是当前正在使用的逻辑(删除了许多字段以使其更易于阅读):

SELECT Line1, Line2, Line3, 
ISNULL(LTRIM(RTRIM(ADDR.City)) + ', ','') + ISNULL(ADDR.RegionCode,'')
+ ' ' + ISNULL(ADDR.PostalCode,'') AS Line4,

UPDATE #tmpBilling
SET Line1 = Line2, Line2 = NULL
WHERE ISNULL(Line1, '') = ''
AND ISNULL(Line2, '') <> ''

UPDATE #tmpBilling
SET Line2 = Line3, Line3 = NULL
WHERE ISNULL(Line2, '') = ''
AND ISNULL(Line3, '') <> ''

UPDATE #tmpBilling
SET Line2 = Line4, Line4 = NULL
WHERE ISNULL(Line2, '') = ''
AND ISNULL(Line4, '') <> ''

UPDATE #tmpBilling
SET Line3 = Line4, Line4 = NULL
WHERE ISNULL(Line3, '') = ''
AND ISNULL(Line2, '') <> ''

最佳答案

我可能在这里遗漏了一些东西,但如果这只是简单的字符串连接,那么这会起作用......

设置测试数据(我添加了更多示例)

IF OBJECT_ID('tempdb..#Employee') IS NOT NULL DROP TABLE #Employee 
CREATE TABLE #Employee (Line1 VARCHAR(30), Line2 VARCHAR(30), Line3 VARCHAR(30),
City VARCHAR(17), State VARCHAR(2), ZIP VARCHAR(10))
GO

INSERT #Employee VALUES ('', '123 Somewhere', '', 'Detroit', 'MI', '48001')
INSERT #Employee VALUES ('123 Somewhere', 'Suite 500', '', 'Detroit', 'MI', '48002')
INSERT #Employee VALUES ('123 Somewhere', 'Suite 500', 'attn: JP', 'Detroit', 'MI', '48003')

SELECT * FROM #Employee

从这里开始,您所要做的就是将字符串缝合在一起。此版本假定您有空值和空字符串可供分解。

SELECT
isnull(nullif(Line1, '') + char(13) + char(10), '')
+ isnull(nullif(Line2, '') + char(13) + char(10), '')
+ isnull(nullif(Line3, '') + char(13) + char(10), '')
+ City + ' ' + State + ' ' + ZIP
+ char(13) + char(10) + '------------------------------'
from #Employee

将其包装到一个函数中:

CREATE FUNCTION dbo.SqueezeAddress
(
@Line1 varchar(30)
,@Line2 varchar(30)
,@Line3 varchar(30)
,@City varchar(17)
,@State varchar(2)
,@Zip varchar(10)
)
RETURNS varchar(200)
AS
BEGIN
RETURN isnull(nullif(@Line1, '') + char(13) + char(10), '')
+ isnull(nullif(@Line2, '') + char(13) + char(10), '')
+ isnull(nullif(@Line3, '') + char(13) + char(10), '')
+ @City + ' ' + @State + ' ' + @ZIP
+ char(13) + char(10) + '------------------------------'
END
GO

最后,将函数放入查询中:

SELECT dbo.SqueezeAddress(Line1, Line2, Line3, City, State, Zip)
from #Employee

关于sql-server - TSQL 将地址转换为邮寄地址 - SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com