Как бы я отделить этот текст с подстрокой? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть плоский файл, который содержит такие данные (обратите внимание, что EACH LINE = ONE ROW и все в 1 поле, и поэтому я использую подстроку, чтобы отделить ее и создать новую таблицу с лучше отформатированными данными):

011000015O0110000150122415000000000FEDERAL RESERVE BANK                1000 PEACHTREE ST N.E.              ATLANTA             GA303094470877372245711     
011000028O0110000151072811000000000STATE STREET BANK AND TRUST COMPANY JAB2NW                              N. QUINCY           MA021710000617664240011     
011000138O0110000151101310000000000BANK OF AMERICA, N.A.               8001 VILLA PARK DRIVE               HENRICO             VA232280000800446013511    

Я пытаюсь выделить это;однако, я не знаю, как найти первое не int число в функции SUBSTRING. Я профилирую эти данные. До сих пор я отделил первые две части этой числовой последовательности, которые мне нужны;Тем не менее, я не могу найти хороший способ отделить начало названия банка (ФЕДЕРАЛЬНЫЙ РЕЗЕРВНЫЙ БАНК). Кажется, перед именем начинается 35 целых чисел, однако, как мне найти длину имени?

Мне действительно нужна помощь только до названия банка, то есть "ФЕДЕРАЛЬНЫЙ РЕЗЕРВНЫЙ БАНК". После этого я, надеюсь, смогу разобраться с остальным.

SELECT 
    SUBSTRING(FIELD1, 0,10) ROUTING_NUMBER,
    SUBSTRING(FIELD1,11,9) FEDRESERVE_NUM,
    SUBSTRING(FIELD1,
FROM srcFlatFile.dbo.fedachdir2018

Это то, что мне нужно («O» не нуждается в своем собственном столбце, а «000000000» и «122203950» сейчас не нужны)):

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    

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Попробуйте этот метод подстроки, (длина жестко закодирована)

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
0 голосов
/ 01 октября 2019

То, что у вас есть, это экспорт файла с фиксированной шириной. Тот, кто предоставил вам файл, должен был предоставить вам спецификацию импорта, но, возможно, они не сделали этого для вас. Это не "все одно поле", хотя. Просто поля имеют заданную длину, и спецификация, если она у вас есть, скажет вам, где ее разбить.

Самый простой способ сделать это - использовать 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-символьными столбцами, но из данных примера он выглядит как один больший столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...