我有一个旧的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
答案 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)
使用CASE
,PATINDEX
和SUBSTRING
,从网址中提取网页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