1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

STRING_SPLIT

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Snoopy1959, 18 März 2020.

  1. Snoopy1959

    Snoopy1959 Benutzer

    Hallo Zusammen,
    in einer Tabelle habe ich Werte die durch ein Komma getrennt sind (Drucker pro Mitarbeiter)
    Wie bekomme ich diese nun dynamisch in einzelne Felder?
    [adlextensionAttribute3] (Varchar, 1000) null

    Mein Versuch (ohne Erfolg)
    SELECT TOP (1000) [adlDatInserted]
    ,[adlUsrInserted]
    ,[adlDatModified]
    ,[adlUsrMofified]
    ,[adlID]
    ,[adlCN]
    ,[adlemployeeNumber]
    ,[adlinitials]
    ,[adlGivenname]
    ,[adlSN]
    ,[adlname]
    ,[adlDisplayName]
    ,[adldescription]
    ,[adlpreferredLanguage]
    ,[adlDepartment]
    ,[adldirectReports]
    ,[adlPhysicalDeliveryOfficeName]
    ,[adlCO]
    ,[adlMail]
    ,[adlmailNickname]
    ,[adlTelephoneNumber]
    ,[adlMobile]
    ,[adlDistinguishedName]
    ,[adlwWWHomePage]
    ,[adlManager]
    ,[adlaccountExpiresOrig]
    ,[adlaccountExpires]
    ,[adlLastLogon]
    ,[adlST]
    ,[adlL]
    ,[adlPostalCode]
    ,[adlStreetAddress]
    ,[adlFacsimileTelephoneNumber]
    ,[adlwhenCreatedOrig]
    ,[adlwhenCreated]
    ,[adlTitle]
    ,[adlcodePage]
    ,[adlcountryCode]
    ,[adluserAccountControl]
    ,[adlCompany]
    ,STRING_SPLIT([adlextensionAttribute3],,) as Drucker
    ,[adlextensionAttribute4]
    ,[adlExtensionAttribute5]
    ,[adlExtensionAttribute6]
    ,[adlmsExchExtensionAttribute30]
    ,[adlmsExchExtensionCustomAttribute1]
    ,[adlmsExchExtensionCustomAttribute2]
    ,[adlmsExchExtensionAttribute16]
    ,[adlmsExchExtensionAttribute17]
    ,[adlmsExchExtensionAttribute18]
    ,[adlmsExchExtensionAttribute19]
    ,[adlmsExchExtensionAttribute20]
    ,[adlmsExchExtensionAttribute21]
    ,[adlmsExchExtensionAttribute22]
    ,[adlmsExchExtensionAttribute23]
    ,[adlmsExchExtensionAttribute24]
    ,[adlmsExchExtensionAttribute25]
    ,[adlmsExchWhenMailboxCreatedOrig]
    ,[adlmsExchWhenMailboxCreated]
    ,[adlEnabled]
    ,[adlStartDate]
    ,[adlEndDate]
    FROM [P_ICT].[dbo].[tbl_AD_User]

    Danke für Eure Hilfe
    Snoopy
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from snoopy ;
     id |           drucker           
    ----+-----------------------------
      1 | drucker1,drucker2, drucker4
      2 | drucker2,drucker3
    (2 rows)
    
    test=*# select id, case when drucker ~ 'drucker1' then 'x' else '' end as drucker1, case when drucker ~ 'drucker2' then 'x' else '' end as drucker2, case when drucker ~ 'drucker3' then 'x' else '' end as drucker3 from snoopy ;
     id | drucker1 | drucker2 | drucker3
    ----+----------+----------+----------
      1 | x        | x        |
      2 |          | x        | x
    (2 rows)
    
    Mit PostgreSQL gemacht. Dein Tabellendesign ist übrigens kapott.
     
  3. Snoopy1959

    Snoopy1959 Benutzer

    Danke Akretschmer
    Du bemerkst, dass mein Tabellen-Design kaputt ist.
    Was meinst Du damit?
    Danke für Deine Hilfe
    snoopy
     
  4. akretschmer

    akretschmer Datenbank-Guru

    du speicherst mehrere Werte, mit Komma getrennt, in einem Feld. Das ist fail.
     
  5. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    soweit ich weiß, möglichst viele Spalten/Tabellen, bevor man mehrere Werte in eine Spalte "schmeißt".

    Optimale Lösung in deinem Fall (meiner Meinung nach):
    1 Tabelle Mitarbeiter (id, name)
    1 Tabelle Drucker (id, typ)
    1 Tabelle Zuweisungen (id, drucker, mitarbeiter)

    Weil ich so hart viel Lust drauf habe gerade:
    Code:
    create table mitarbeiter(id serial primary key, name text unique);
    create table drucker(id serial primary key, typ text unique);
    create table zuweisungen(id serial primary key, drucker integer references drucker(id), mitarbeiter integer references mitarbeiter(id));
    
    Um die Tabellen zu erstellen.

    Jetzt einem Mitarbeiter zB 3 Drucker zuweisen, die vorher noch eingetragen werden:
    Code:
    insert into mitarbeiter(name) values ('Datenschutz');
    insert into drucker(typ) values ('Drucker 1');
    insert into drucker(typ) values ('Drucker 2');
    insert into drucker(typ) values ( 'Drucker 3');
    insert into zuweisungen(drucker, mitarbeiter) values (1, 1);
    insert into zuweisungen(drucker, mitarbeiter) values (2, 1);
    insert into zuweisungen(drucker, mitarbeiter) values (3, 1);
    
    Jetzt einen select welcher Mitarbeiter welchen Drucker hat:
    Code:
    select mitarbeiter.name, drucker.typ from zuweisungen inner join mitarbeiter on (mitarbeiter.id = zuweisungen.mitarbeiter) inner join drucker on (drucker.id = zuweisungen.drucker);
    
    Ergebnis:
    i.png

    EDIT:
    wenn du bei einem getrennten Komma bleiben möchtest (keine Ahnung, wieso), dann kann das ein UI wie PHP zum Beispiel... (explode funktion)
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden