Sql 如何用子字符串分隔此文本?

Sql 如何用子字符串分隔此文本?,sql,ssms,Sql,Ssms,我有一个包含如下数据的平面文件(请注意,每行=一行,全部在一个字段中,这就是为什么我使用子字符串将其分隔开来,并使用格式更好的数据创建一个新表): 我试图把它分开;但是,我不知道如何在子字符串函数中找到第一个非整数。我正在分析这些数据。到目前为止,我已经分离了我需要的这个数字序列的前两部分;但是,我很难找到一个好方法来分隔银行名称的开头(联邦储备银行)。名称开始之前似乎是35个整数,但是,如何查找名称的长度 我真的只需要帮助,直到银行名称,即“联邦储备银行”。在那之后,我希望能把剩下的事情弄清楚

我有一个包含如下数据的平面文件(请注意,每行=一行,全部在一个字段中,这就是为什么我使用子字符串将其分隔开来,并使用格式更好的数据创建一个新表):

我试图把它分开;但是,我不知道如何在子字符串函数中找到第一个非整数。我正在分析这些数据。到目前为止,我已经分离了我需要的这个数字序列的前两部分;但是,我很难找到一个好方法来分隔银行名称的开头(联邦储备银行)。名称开始之前似乎是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