Sql 如何用子字符串分隔此文本?
我有一个包含如下数据的平面文件(请注意,每行=一行,全部在一个字段中,这就是为什么我使用子字符串将其分隔开来,并使用格式更好的数据创建一个新表): 我试图把它分开;但是,我不知道如何在子字符串函数中找到第一个非整数。我正在分析这些数据。到目前为止,我已经分离了我需要的这个数字序列的前两部分;但是,我很难找到一个好方法来分隔银行名称的开头(联邦储备银行)。名称开始之前似乎是35个整数,但是,如何查找名称的长度 我真的只需要帮助,直到银行名称,即“联邦储备银行”。在那之后,我希望能把剩下的事情弄清楚Sql 如何用子字符串分隔此文本?,sql,ssms,Sql,Ssms,我有一个包含如下数据的平面文件(请注意,每行=一行,全部在一个字段中,这就是为什么我使用子字符串将其分隔开来,并使用格式更好的数据创建一个新表): 我试图把它分开;但是,我不知道如何在子字符串函数中找到第一个非整数。我正在分析这些数据。到目前为止,我已经分离了我需要的这个数字序列的前两部分;但是,我很难找到一个好方法来分隔银行名称的开头(联邦储备银行)。名称开始之前似乎是35个整数,但是,如何查找名称的长度 我真的只需要帮助,直到银行名称,即“联邦储备银行”。在那之后,我希望能把剩下的事情弄清楚
SELECT
SUBSTRING(FIELD1, 0,10) ROUTING_NUMBER,
SUBSTRING(FIELD1,11,9) FEDRESERVE_NUM,
SUBSTRING(FIELD1,
FROM srcFlatFile.dbo.fedachdir2018
这就是我所需要的(“O”不需要它自己的列,现在不需要“000000000”和“122203950”):
这里有一个固定宽度的文件导出。无论是谁向您提供了该文件,都应该向您提供一个导入规范,但听起来他们可能没有为您这样做。不过,这并不是“一个领域”。只是字段是设置长度的,如果你有规范,它会告诉你在哪里分解 显然,最简单的方法是使用SSIS,或者,如果这是一次性导入,则使用导入数据向导(作为记录,它只为您写入SSIS包;您应该使用“将包保存到文件系统”选项,因为我从未见过只发生一次的“一次性”导入)。然后,一旦数据在表中,就可以对其执行任何其他操作 希望您知道前五列是什么,但本规范的其余部分是不言自明的:
+-------------------+--------+
| Name | Width |
+-------------------+--------+
| Column1 | 9 |
| Column2 | 1 |
| Column3 | 9 |
| Column4 | 7 |
| Column5 | 9 |
| BankName | 36 |
| BankAddy | 36 |
| BankCity | 20 |
| BankStateCd | 2 |
| BankZip | 9 |
| BankAreaCode | 3 |
| BankPhone | 10 |
| BankCountryPrefix | 2 |
+-------------------+--------+
地址可能实际上是两个18个字符的列,但从示例数据来看,它看起来只是一个更大的列 尝试此子字符串方法(长度是硬编码的)
这是一个问题吗?它将极大地帮助我的代码,允许我不依赖于固定的字段长度,而只依赖于名称的长度。所以,是的,这是一个问题,我请求帮助。
011000015 O 011000015 0122415 000000000 FEDERAL RESERVE BANK 1000 PEACHTREE ST N.E. ATLANTA GA 30309-4470 8773722457 11
011000028 O 011000015 1072811 000000000 STATE STREET BANK AND TRUST COMPANY JAB2NW N. QUINCY MA 02171-0000 6176642400 11
011000138 O 011000015 1101310 000000000 BANK OF AMERICA, N.A. 8001 VILLA PARK DRIVE HENRICO VA 23228-0000 8004460135 11
+-------------------+--------+
| Name | Width |
+-------------------+--------+
| Column1 | 9 |
| Column2 | 1 |
| Column3 | 9 |
| Column4 | 7 |
| Column5 | 9 |
| BankName | 36 |
| BankAddy | 36 |
| BankCity | 20 |
| BankStateCd | 2 |
| BankZip | 9 |
| BankAreaCode | 3 |
| BankPhone | 10 |
| BankCountryPrefix | 2 |
+-------------------+--------+
IF OBJECT_ID('Sampletable') IS NOT NULL
DROP TABLE Sampletable
GO
CREATE TABLE Sampletable
(
Samples VARCHAR(100)
)
GO
INSERT INTO Sampletable VALUES
('011000015O0110000150122415000000000FEDERAL RESERVE BANK'),
('011000028O0110000151072811000000000STATE STREET BANK AND TRUST COMPANY'),
('011000138O0110000151101310000000000BANK OF AMERICA, N.A.')
SELECT SUBSTRING (Samples,1,9) AS [1],SUBSTRING (Samples,10,1) AS [2],
SUBSTRING (Samples,11,9) AS [3],SUBSTRING (Samples,20,7) AS [4],
SUBSTRING (Samples,27,9) AS [5],REPLACE(Samples,SUBSTRING(Samples,1,35),'') AS [6]
FROM Sampletable