我的表中存有一个等式.我一次取一个方程式,并希望用任何其他字符替换所有运算符.
输入字符串: (N_100-(6858)*(6858)*N_100/0_2)%N_35
运营商或模式: (+, -, *, /, %, (, ))
替换字符: ~
输出字符串: ~N_100~~6858~~~6858~~N_100~0_2~~N_35
我曾尝试使用嵌套REPLACE函数进行下面的查询,并获得了所需的输出:
DECLARE @NEWSTRING VARCHAR(100)
SET @NEWSTRING = '(N_100-(6858)*(6858)*N_100/0_2)%N_35' ;
SELECT @NEWSTRING = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
@NEWSTRING, '+', '~'), '-', '~'), '*', '~'), '/', '~')
, '%', '~'), '(', '~'), ')', '~')
PRINT @NEWSTRING
Run Code Online (Sandbox Code Playgroud)
输出: ~N_100~~6858~~~6858~~N_100~0_2~~N_35
如何在不使用嵌套替换函数的情况下替换所有运算符?
根据Elixir Enumerables和Streams教程:
|>符号是管道操作符:它只是从左侧的表达式获取输出,并将其作为右侧函数调用的输入传递.
Enum模块中的所有功能都非常渴望.
那么以下陈述的区别是什么?为什么最后一个会返回不同的结果?
iex(1)> 1..1_000 |> Enum.reverse |> Enum.take 5
[1000, 999, 998, 997, 996]
iex(2)> (Enum.reverse 1..1_000) |> Enum.take 5
[1000, 999, 998, 997, 996]
iex(3)> Enum.reverse 1..1_0000 |> Enum.take 5
[5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用SEDE来确定总共授予了多少个基于标签的徽章.我的典型策略是总结:
select sum(TagBased)
from Badges
Run Code Online (Sandbox Code Playgroud)
不幸的是,因为TagBased有点值,我得到这个错误:
操作数数据类型位对于sum运算符无效.
出于绝望,我试着数:
select count(TagBased)
from Badges
Run Code Online (Sandbox Code Playgroud)
这会计算非空值的数量,在这种情况下,它们相同count(*).那么如何在总体上使用一点价值呢?
我想解析表Tests_1中CLOB列中的JSON字符串,并将其插入另一个表(Test_2).
如何在不使用任何JSON库的情况下在PL/SQL中执行此操作?
create table Tests_1
(
value CLOB
)
create table Test_2 (a date,b date,c number,d number, e number)
INSERT INTO Tests_1
(value)
VALUES
('{
"a":"01/01/2015",
"b":"31/12/2015",
"c":"11111111111",
"d":"1111111111",
"e":"1234567890"
}');
Run Code Online (Sandbox Code Playgroud) 我有这种情况:
drop table #t1;
drop table #t2
select *
into #t1
from
(select 'va1'c1,'vb1'c2,'vc1'c3 union all
select 'va2'c1,'vb2'c2,'vc2'c3 union all
select 'va3'c1,'vb3'c2,'vc3'c3 union all
select 'va1'c1,'vb1'c2,'vc1'c3 union all
select 'va2'c1,'vb2'c2,'vc2'c3 union all
select 'va3'c1,'vb3'c2,'vc3'c3 union all
select 'va1'c1,'vb1'c2,'vc1'c3 union all
select 'va2'c1,'vb2'c2,'vc2'c3 union all
select 'va3'c1,'vb3'c2,'vc3'c3 union all
select 'va1'c1,'vb1'c2,'vc1'c3 union all
select 'va2'c1,'vb2'c2,'vc2'c3 union all
select 'va3'c1,'vb3'c2,'vc3'c3 union all
select 'va4'c1,'vb4'c2,'vc4'c3) t
select *
into #t2
from #t1
where 0 = 1
;with tmp1 as
(
select
t1.*,
ROW_NUMBER() …Run Code Online (Sandbox Code Playgroud) 我有以下表定义
CREATE TABLE _Table
(
[Pat] NVARCHAR(8),
[Codes] NVARCHAR(50),
[C1] NVARCHAR(6),
[C2] NVARCHAR(6),
[C3] NVARCHAR(6),
[C4] NVARCHAR(6),
[C5] NVARCHAR(6)
);
GO
INSERT INTO _Table ([Pat], [Codes], [C1], [C2], [C3], [C4], [C5])
VALUES
('Pat1', 'U212,Y973,Y982', null, null, null, null, null),
('Pat2', 'M653', null, null, null, null, null),
('Pat3', 'U212,Y973,Y983,Z924,Z926', null, null, null, null, null);
GO
Run Code Online (Sandbox Code Playgroud)
现在,我想分割每行的代码并填充Cn列,以便最终得到
Pat Codes C1 C2 C3 C4 C5
Pat1 'U212,Y973,Y982' U212 Y973 Y982 NULL NULL
Pat2 'M653' M653 NULL NULL NULL NULL …Run Code Online (Sandbox Code Playgroud) 我正在尝试将低性能MERGE语句重构为UPDATEOracle 12.1.0.2.0中的语句.该MERGE声明是这样的:
MERGE INTO t
USING (
SELECT t.rowid rid, u.account_no_new
FROM t, u, v
WHERE t.account_no = u.account_no_old
AND t.contract_id = v.contract_id
AND v.tenant_id = u.tenant_id
) s
ON (t.rowid = s.rid)
WHEN MATCHED THEN UPDATE SET t.account_no = s.account_no_new
Run Code Online (Sandbox Code Playgroud)
它大多是低性能的,因为对大型(100M行)表有两个昂贵的访问 t
这些是涉及的简化表:
taccount_no正在迁移其列的目标表.u迁移指令表包含account_no_old→ account_no_new映射v建模contract_id和之间的一对一关系的辅助表tenant_id架构是:
CREATE TABLE v (
contract_id NUMBER(18) NOT NULL PRIMARY KEY,
tenant_id NUMBER(18) NOT …Run Code Online (Sandbox Code Playgroud) Snowflake 没有记录其使用 AS 子句的虚拟列功能。我正在进行迁移,需要以编程方式过滤掉虚拟列。
有什么方法可以识别一列是虚拟的吗?该Information Schema.COLLUMNS视图显示虚拟列定义和非虚拟列定义之间没有任何区别。
calculated-columns virtual-column snowflake-cloud-data-platform
我的网站有超过20.000.000个条目,条目有类别(FK)和标签(M2M).至于查询,即使像SELECT id FROM table ORDER BY id LIMIT 1000000, 10MySQL需要扫描1000010行,但这实在是慢得令人无法接受(而pks,索引,连接等等在这里帮助不大,仍然是1000010行).所以我试图通过使用这样的触发器存储行计数和行号来加速分页:
DELIMITER //
CREATE TRIGGER @trigger_name
AFTER INSERT
ON entry_table FOR EACH ROW
BEGIN
UPDATE category_table SET row_count = (@rc := row_count + 1)
WHERE id = NEW.category_id;
NEW.row_number_in_category = @rc;
END //
Run Code Online (Sandbox Code Playgroud)
然后我可以简单地说:
SELECT *
FROM entry_table
WHERE row_number_in_category > 10
ORDER BY row_number_in_category
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
(现在只扫描了10行,因此选择速度非常快,虽然插入速度较慢,但与选择相比它们很少见,所以没关系)
这是一个糟糕的方法,还有什么好的选择吗?
我想使用JSON_VALUE以下方法查询表中的数据:
var str = "123";
var value = "Name"
using(var conn = GetMyConnection())
{
var result = conn.QueryFirstOrDefault<string>(
@"SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], @MyQuery) = @Str",
new
{
MyQuery = $"$.{value}",
Str = str
}
);
}
Run Code Online (Sandbox Code Playgroud)
我在SQL Server中尝试这个,它正在工作:
SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], '$.Name') = '123'
Run Code Online (Sandbox Code Playgroud)
我应该如何调整我的代码?
sql ×5
t-sql ×5
sql-server ×3
oracle ×2
c# ×1
dapper ×1
elixir ×1
json ×1
json-query ×1
merge ×1
mysql ×1
pagination ×1
plsql ×1
replace ×1