2016-07-17 8 views
-1

ich eine alte SQL-Datenbank (Microsoft SQL Server) haben mit Tausenden von Zeilen, die Daten enthält, wie folgt:Nehmen Sie einen Wert aus einer Zelle SQL-Tabelle und fügen Sie ihn in eine andere Zelle

ID  urlString 

1  page.aspx?pageID=34 
2  page.aspx?pageID=163 
3  page.aspx 
4  page.aspx?pageID=23 

Ich habe eine hinzugefügt neue Spalte (PageID) zur Datenbank Ich möchte eine UPDATE-Abfrage erstellen, um die PageID aus dem URL-String zu kopieren und sie wie folgt in die neue Spalte (PageID) einzufügen. Wenn es keine pageID gibt, möchte ich 0 hinzufügen. Wie kann ich das erreichen?

ID  URLstring    pageID 

1  page.aspx?pageID=34  34 
2  page.aspx?pageID=163  163 
3  page.aspx     0 
4  page.aspx?pageID=23  23 
+0

Welche DB-Engine verwenden Sie? –

+0

mit welchen rdbms arbeitest du? Stringbearbeitungsfunktionen haben normalerweise unterschiedliche Formate in verschiedenen Datenbanken. –

+0

Microsoft SQL Server – Gloria

Antwort

0
UPDATE YourTable 
SET pageID= 
SUBSTRING(urlString,CHARINDEX('=', urlString)+1,CHARINDEX('=', urlString)) 

der Wert 0

UPDATE YourTable 
SET pageID= 
CASE 
     WHEN CHARINDEX('=', urlString) > 0 THEN 
      SUBSTRING(urlString,CHARINDEX('=', urlString)+1,CHARINDEX('=', urlString)) 
     ELSE 0 
    END 
+0

wird der endgültige Wert für newcoulmn gesetzt –

0
I try it: 

update yourtable 
set pageID= 
case when 
substring(URLstring, charindex('=', URLstring) +1, len(URLstring) - charindex('=', URLstring) ) 
=URLstring then '0' 
else 
substring(URLstring, charindex('=', URLstring) +1, len(URLstring) - charindex('=', URLstring) ) 
end 
0

Um sich bitte an die folgende

SELECT urlString, cast(REVERSE(SUBSTRING(REVERSE(urlString),0,CHARINDEX('=',REVERSE(urlString)))) as smallint) AS [pageID] 

this helps versuchen.

0

Nun, welche SQL-Variante die Datenbank verwendet, wird hier einen Unterschied machen. (d. h. SQLplus, NOSQL usw.). Es sollte jedoch nicht zu kompliziert sein. Unter der Annahme, dass beide Spalten INTs sind, könnten Sie wahrscheinlich nur, wie etwas zu tun ist so

UPDATE table_name 
SET pageID = URLstring; 

Einige andere Quellen für zusätzliche Informationen.

Eine ähnliche Stapelüberlauf Frage: Copy data from one column to other column (which is in a different table)

Diese auf der Angelegenheit eine TutorialsPoint Webseite ist: http://www.tutorialspoint.com/sql/sql-update-query.htm (TutorialsPoint ist in der Regel eine meiner ersten Stationen für jede Programmierung bezogenes Wissen, es ist eine ganz wertvolle Website.)

Dies ist eine w3schools Webseite zu diesem Thema: http://www.w3schools.com/sql/sql_update.asp

Hoffnung finden Sie alles heraus bekommen!

0

Sie können dies erreichen, indem die PARSENAME die folgende UPDATE Abfrage:

UPDATE TestTable 
SET pageID = CASE WHEN ISNUMERIC(PARSENAME(REPLACE(URLstring, '=', '.'), 1)) = 1 THEN PARSENAME(REPLACE(URLstring, '=', '.'), 1) 
      ELSE 0 END 

Proben Ausführung mit den gegebenen Beispieldaten

DECLARE @TestTable TABLE (ID INT, URLstring VARCHAR (200), PageID INT); 

INSERT INTO @TestTable (ID, URLstring, pageID) VALUES 
(1, 'page.aspx?pageID=34' , NULL), 
(2, 'page.aspx?pageID=163' , NULL), 
(3, 'page.aspx'   , NULL), 
(4, 'page.aspx?pageID=23' , NULL); 

UPDATE @TestTable 
SET pageID = CASE WHEN ISNUMERIC(PARSENAME(REPLACE(URLstring, '=', '.'), 1)) = 1 THEN PARSENAME(REPLACE(URLstring, '=', '.'), 1) 
      ELSE 0 END 

So ist die SELECT * FROM @TestTable wird das Ergebnis als:

ID URLstring    PageID 
------------------------------------ 
1 page.aspx?pageID=34 34 
2 page.aspx?pageID=163 163 
3 page.aspx    0 
4 page.aspx?pageID=23 23 
+0

Dies wird fehlschlagen, wenn die Abfragezeichenfolge mehr als 4 Parameter enthält. –

0

Mit CASE, PATINDEX und SUBSTRING ist es ziemlich einfach, die Seiten-ID aus der URL zu extrahieren.

Erstellen und füllen Beispieltabelle (Bitte speichern uns diesen Schritt in Ihrer zukünftigen Fragen)

DECLARE @T As TABLE 
(
    Id int IDENTITY(1,1), 
    URLString varchar (40), 
    PageId int 
) 

INSERT INTO @T (URLString) VALUES 
('page.aspx?blabla=yadayada&pageID=34'), 
('page.aspx?pageID=163'), 
('page.aspx'), 
('page.aspx?pageID=23') 

Update-Anweisung:

UPDATE @T 
SET PageId = CAST(
        CASE WHEN PATINDEX('%pageID=%', URLString) > 0 THEN 
         SUBSTRING(URLString, PATINDEX('%pageID=%', URLString) + 7, LEN(URLString)) 
        ELSE 
         '0' 
        END 
       As int) 

Überprüfung:

SELECT Id, URLString, PageId 
FROM @T 

Ergebnisse:

Id   URLString        PageId 
----------- ---------------------------------------- ----------- 
1   page.aspx?blabla=yadayada&pageID=34  34 
2   page.aspx?pageID=163      163 
3   page.aspx        0 
4   page.aspx?pageID=23      23 
Verwandte Themen