我正在尝试编写一个用空格替换特殊字符的查询。下面的代码有助于识别行。(字母数字字符、逗号和空格有效):
SELECT columnA
FROM tableA
WHERE columnA like '%[^a-Z0-9, ]%'
Run Code Online (Sandbox Code Playgroud)
如何将替换函数集成到 select 语句中,以便结果集中除字母数字、逗号和空格之外的所有字符都替换为 ' '(空格)。这个不行:
SELECT replace(columnA,'%[^a-Z0-9, ]%',' ')
FROM tableA
WHERE columnA like '%[^a-Z0-9, ]%'
Run Code Online (Sandbox Code Playgroud) Microsoft SQL Server 本身是否支持replace使用通配符的某种功能?我认为正则表达式本身不可用。
我注意到有一个PATINDEX函数可以用来将一个解决方案组合在一起——有没有更简单的方法?
例如REPLACE(data,'[xy]','q'),以取代x或y与q。
更新表中多行的最简单方法是什么?我有一个如下所示的 csv 文件:
|primary_key |value|
| 1 | xyz|
| 2 | abc|
| 3 | def|
...
Run Code Online (Sandbox Code Playgroud)
目标表中已存在具有这些主键的行
我想用这些值更新目标表。是否有语法,以便我可以编写如下内容:
update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3);
Run Code Online (Sandbox Code Playgroud)
查看MySQL 更新参考、本站点(MySQL-csv 更新)、SO(更新多行、多个数据库更新、更新多行),我怀疑答案是“否”,但我想确认这一点是真的。
我继承了一个系统,其中对 MySQL 表的所有更新(甚至是单行/记录)都不是使用UPDATE table_name SET. 相反,它们是通过以下方式完成的:
LOAD DATA ... REPLACE INTO TABLE。这是我第一次看到这种更新表记录的方法,我想知道这样做的理由是什么。
顺便说一句,由于更新时需要锁定 CSV 文件,该方案会导致许多线程同步问题。
LOAD DATA ... REPLACE INTO TABLE我希望得到关于使用而不是 的好处的解释或见解UPDATE table_name SET。
假设我在 Postgres 中有一个具有此值的文本字段:
'bar$foo$john$doe$xxx'
Run Code Online (Sandbox Code Playgroud)
我想将最后一次出现的美元 ( $) 字符替换为另一个字符,例如“-”。替换后该字段的内容应为:
'bar$foo$john$doe-xxx'
Run Code Online (Sandbox Code Playgroud) 我需要运行一个查询来查找和替换 mysql 数据库的所有表中的一些文本。
我找到了这个查询,但它只在 tbl_name 表和列字段中查找文本。
update tbl_name set column=REPLACE(column, 'fuschia', 'fuchsia');
Run Code Online (Sandbox Code Playgroud)
我需要它来查看所有表和所有字段:(数据库中的任何地方)
默认情况下,在 PostgreSQL 中,regexp_replace()替换字符串中第一次出现的子字符串,同时replace()替换字符串中所有出现的子字符串。为什么默认行为不同?
(我知道regexp_replace可以使用该g选项替换字符串中所有出现的子字符串。)
例子:
SELECT regexp_replace('hello world', 'o', 'z'); -- returns "hellz world"
SELECT regexp_replace('hello world', 'o', 'z', 'g'); -- returns "hellz wzrld"
SELECT replace('hello world', 'o', 'z'); -- returns: "hellz wzrld"
Run Code Online (Sandbox Code Playgroud) 分析一个简单的查询,我注意到 REPLACE 函数增加了估计的行大小。查看在 AdventureWorks 上执行的以下查询:
select p.BusinessEntityID, REPLACE(p.FirstName, 'a', 'b') as X
from Person.Person p
Run Code Online (Sandbox Code Playgroud)
以下是执行计划。仅应用与 REPLACE 函数相关的计算标量组件时,估计的行大小从 65 B 开始增加到 4015 B。谁能解释一下吗?
测试在Sql Server 2022上完成。
提前致谢。
我需要编写一个存储过程来更新数据库中的链接引用。链接可以包含在几个包含 JSON 的 nvarchar 字段中(可能包含一些 url)。
为此,我每次迭代分批更新表 8129 个项目,这样机器就不会挂起(理论上)。
但现在代码似乎无论如何都挂起,它不会打印任何消息,并且程序继续运行(不影响任何数据)很多分钟,直到我必须终止该程序(同时似乎没有影响任何数据) 。
如果我尝试在玩具示例上使用相同的逻辑,我不会遇到任何问题,所以我认为我的问题是由于表很大(几十万行)这一事实造成的。
这里是一个正在运行的最小示例,更大的表上完全相同的代码显然没有执行任何操作(使用 SQL Server 2019 进行测试)。
程序代码:
ALTER PROCEDURE [dbo].[SiteUrlChangeURL]
@FullOldUrl nvarchar(500),
@FullNewUrl nvarchar(500)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SET @FullOldUrl = ISNULL(@FullOldUrl,'');
SET @FullNewUrl = ISNULL(@FullNewUrl,'');
IF ( LEN(@FullOldUrl) <= 0 OR LEN(@FullNewUrl) <= 0 )
BEGIN
PRINT('Invalid parameters');
RETURN 1;
END
--ARTICLE
RAISERROR ('updating articles',0,1) WITH NOWAIT;
WHILE 1=1
BEGIN
UPDATE …Run Code Online (Sandbox Code Playgroud) 这是我的临时表:
CREATE TABLE #test123(
c1 float,
c2 float,
c3 float,
c4 float,
c5 float
);
INSERT #test123(c1,c2,c3,c4,c5)
VALUES (2,3,NULL,1,2),
(2,NULL,NULL,1,2),
(2,3,NULL,NULL,2),
(NULL,3,NULL,1,NULL),
(2,3,NULL,1,2);
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询来替换第一列中的所有 NULL 时
INSERT INTO #test123 (c1) VALUES (ISNULL(c1,0));
Run Code Online (Sandbox Code Playgroud)
或者
INSERT INTO #test123 (c1) SELECT CASE WHEN c1 IS NULL THEN 0 END AS c1;
Run Code Online (Sandbox Code Playgroud)
我两次都收到错误“无效的列名 'c1'”。
的语法(来源)INSERT INTO是:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Run Code Online (Sandbox Code Playgroud) replace ×10
sql-server ×5
mysql ×3
t-sql ×3
postgresql ×2
update ×2
csv ×1
insert ×1
isnull ×1
null ×1