从SQL表单元格中获取值并将其插入另一个单元格中

时间:2016-07-17 11:32:48

标签: sql sql-server sql-update

我有一个旧的SQL数据库(Microsoft的SQL Server),其中有数千行包含如下数据:

let newMessages = self.realm.objects(Message).filter({ $0.chatId == self.chatId! && $0.date.compare(date) == NSComparisonResult.OrderedDescending })

我已向数据库添加了新列(pageID)。我想创建一个UPDATE查询来从URLtring复制pageID并将其插入新列(pageID),如下所示。如果没有pageID我想添加0.我怎么能实现呢?

ID      urlString

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

6 个答案:

答案 0 :(得分:0)

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

拥有0值

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

答案 1 :(得分: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

答案 2 :(得分:0)

请尝试以下

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

希望这有帮助。

答案 3 :(得分:0)

嗯,无论数据库使用哪种SQL语言变体都会有所不同。 (即SQLplus,NOSQL等)但是,它不应该太复杂。假设两列都是INT,你可能只是这样做

UPDATE table_name
SET pageID = URLstring;

以下是其他一些其他信息来源。

类似的堆栈溢出问题: Copy data from one column to other column (which is in a different table)

这是关于此问题的TutorialsPoint网页:http://www.tutorialspoint.com/sql/sql-update-query.htm(TutorialsPoint通常是我对任何编程相关知识的第一站,这是一个非常有价值的网站。)

这是关于此问题的w3schools网页:http://www.w3schools.com/sql/sql_update.asp

希望你能搞清楚一切!

答案 4 :(得分:0)

您可以使用以下UPDATE查询PARSENAME来实现此目的:

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

使用给定的样本数据执行样本

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

因此SELECT * FROM @TestTable将导致:

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

答案 5 :(得分:0)

使用CASEPATINDEXSUBSTRING,从网址中提取网页ID非常简单。

创建并填充样本表(在将来的问题中保存此步骤)

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 @T
SET PageId =    CAST(
                    CASE WHEN PATINDEX('%pageID=%', URLString) > 0 THEN
                        SUBSTRING(URLString, PATINDEX('%pageID=%', URLString) + 7, LEN(URLString))
                    ELSE
                        '0'
                    END
                 As int)

验证:

SELECT Id, URLString, PageId 
FROM @T 

结果:

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