我在Postgres帽子中有一个数组搜索匹配至少一个标签,如下所示:
SELECT * FROM users WHERE tags && ['fun'];
| id | tags |
| 1 | [fun,day] |
| 2 | [fun,sun] |
Run Code Online (Sandbox Code Playgroud)
可以匹配前缀吗?就像是:
SELECT * FROM users WHERE tags LIKE 'f%';
| id | tags |
| 1 | [fun,day] |
| 2 | [fun,sun] |
| 3 | [far] |
| 4 | [fin] |
Run Code Online (Sandbox Code Playgroud) 我知道我可以通过使用在t-sql的表中的一列中搜索一个术语like %termToFind%
.而且我知道我可以在表格中获得所有列:
SELECT *
FROM MyDataBaseName.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'MyTableName`
Run Code Online (Sandbox Code Playgroud)
如何在表的每个列上执行类似的comprparison?我有一个非常大的桌子,所以我不能拼出LIKE
每一列.
这是我的示例XML:
<root>
<element>
<subelement>
<value code="code1">value1</value>
<value code="code2">value2</value>
</subelement>
</element>
</root>
Run Code Online (Sandbox Code Playgroud)
这是我的测试查询:
DECLARE @tempTable TABLE (
ValueCode nvarchar(MAX),
Value nvarchar(MAX)
)
DECLARE @xml XML
select @xml = cast(c1 as xml) from OPENROWSET (BULK 'C:\test.xml', SINGLE_BLOB) as T1(c1)
INSERT INTO @tempTable
SELECT
Tbl.Col.value('subelement[1]/@code', 'NVARCHAR(MAX)'),
Tbl.Col.value('subelement[1]', 'NVARCHAR(MAX)')
FROM @xml.nodes('//element') Tbl(Col)
SELECT * FROM @tempTable
Run Code Online (Sandbox Code Playgroud)
执行时,查询会给出一行,其中ValueCode列包含NULL,而Value列包含'value1value2'.我想得到的是与分隔符连接的属性和值.例如,我需要ValueCode来包含'code1; code2'和值包含'value 1; 值2' .我怎样才能做到这一点?
所以今天我发现了一个奇怪的SQL Server行为.
假设我有一个这样的表,id是主键
??????????????????????
? id ? name ? active ?
??????????????????????
? 1 ? a ? 0 ?
? 2 ? a ? 1 ?
??????????????????????
Run Code Online (Sandbox Code Playgroud)
假设我有一个filtered unique index on name where active = 1
.现在,我只想为行切换活动,将第一行设置为非活动状态并将第二行设置为活动状态.当我尝试更新它时
update Table1 set
active = n.active
from Table1 as t
inner join (values (1, 1), (2, 0)) as n(id, active) on n.id = t.id
Run Code Online (Sandbox Code Playgroud)
它工作正常.但如果我尝试合并:
merge Table1 as t
using (values (1, 1), (2, 0)) as n(id, active) …
Run Code Online (Sandbox Code Playgroud) 来自这样的字符串
<iframe width="560" height="315" src="https://www.youtube.com/embed/KRFHiBW9RE8" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)
我只需要选择源,所以src ="我需要的字符串"之间的单词
我已经尝试过使用IndexOf这个单词src ="但链接没有固定数量的字符来设置结尾.
我有一个表在一个列中存储json。我想通过合并另一个json更新json值。
就像是:
insert into mytable
values ('{ "a": "b" ')
update mytable
set jsonColumn = JSON_MERGE(jsonColumn, '{ "c": 2 }')
Run Code Online (Sandbox Code Playgroud)
这应该导致像这样的json:
{ "a": "b", "c": 2 }
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有这样的JSON_MERGE
功能,而JSON_MODIFY只允许我一一修改列。我有太多的东西,包括嵌套属性。
我基本上是在寻找等同于postgres || 级联运算符。
现在我已经阅读了其他stackoverflow Game of Life问题,并且还贪婪地使用Google搜索.我知道如何为我的Python生命游戏实现.我想跟踪网格中的活动单元格.问题是我是坚持我应该如何编码.
这就是我的想法,但除此之外,我的智慧结束了:
B C D
. A .
. . .
我考虑使用OrderedSet或其他东西来处理订单并避免重复.但是我仍然遇到了这些问题.我只需要一个方向.
假设我有一个这样的表模式:
Partners
表
ID Name
1 Test
Run Code Online (Sandbox Code Playgroud)
Partners_Codes
表
Partner_ID Code
1 'Test_Code'
Run Code Online (Sandbox Code Playgroud)
我也有独特的聚集索引Partner_ID
中Partners_Codes
:
create unique clustered index IX_Partners_Codes on Partners_Codes (Partner_ID);
Run Code Online (Sandbox Code Playgroud)
现在,当我这样查询时:
select
P.ID, P.Name
from dbo.Partners as P
left outer join dbo.Partners_Codes as PC on PC.Partner_ID = P.ID;
Run Code Online (Sandbox Code Playgroud)
SQL Server优化器非常智能,可以查看索引,Partners_Codes
而不是查询Partners_Codes,这有利于提高性能.
现在假设我必须添加一个Active
列Partners_Codes
,因此我可以为每个列添加许多代码Partner
,但只有一个代码可以Active
.
Partners_Codes2
表
Partner_ID Code Active
1 'Test_Code' 1
1 'Test_Code_old1' 0
1 'Test_Code_old2' 0
Run Code Online (Sandbox Code Playgroud)
我尝试了两种方法 - 使用过滤索引Active = 1
或在此视图上创建视图和唯一索引:
create table …
Run Code Online (Sandbox Code Playgroud) sql sql-server database-design query-optimization sql-server-2008-r2
使用SQL 2012并将XML传递到存储过程,该存储过程必须接受该输入并为传递给存储过程的XML部分中的每个项目写一行.XML看起来像:
<MyXML>
<MyMsg>My Text Message</MyMsg>
<MsgTime>2013-09-25 10:52:37.098</MsgTime>
<SendToList>
<SendTo>John</SendTo>
<SendTo>James</SendTo>
<SendTo>Rob</SendTo>
<SendTo>Pete</SendTo>
<SendTo>Sam</SendTo>
</SendToList>
</MyXML>
Run Code Online (Sandbox Code Playgroud)
存储过程的输出应该是插入表中的5行(SendTo
上面各有一行),并且每个表在该表中的MyMsg
和MsgTime
字段中具有相同的值.
我可以得到数量的计数,SendTo
并可以获得XML,SendToList
但我不知道如何迭代它来进行插入.
我可以使用以下SQL来获取XML中的内容.
SELECT
x.value('(/MyXML/MyMsg)[1]', 'VARCHAR(1024)'),
x.value('(/MyXML/MsgTime)[1]', 'DATETIME'),
@max = x.query('<e> { count(/MyXML/SendToList/SendTo) } </e>').value('e[1]','int'),
@mlst = x.query('/MyXML/SendTo')
FROM @XML_In.nodes('//MyXML') i(x)
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用变量和a WHILE
来遍历SendToList中的项目,但我知道必须有更好的方法.
SELECT @msgTo= @XML_In.value('(/MyXML/SendToList/SendTo[position()=sql:variable("@cnt")])[1]','VARCHAR(100)')
Run Code Online (Sandbox Code Playgroud)
上面的内容为我提供了SendToList中每个项目的值.
如果我选择变量@mlst,我可以看到我需要循环的XML结构.
<SendToList>
<SendTo>John</SendTo>
<SendTo>James</SendTo>
<SendTo>Rob</SendTo>
<SendTo>Pete</SendTo>
<SendTo>Sam</SendTo>
</SendToList>
Run Code Online (Sandbox Code Playgroud)
即使是WHILE
作品,它也会一个接一个地插入.我认为可用的方法应该能够完成而不是循环,但我不知道如何使用它们做我需要做的事情.
将不胜感激任何帮助或建议.
我想知道,如何将 XML 内容从任意文件加载到局部变量中?
这适用于固定文件:
DECLARE @xml XML
SET @xml =
(
SELECT *
FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)
但是,我想从任何任意文件加载数据。
这不起作用(因为 BULK 似乎只支持 String 参数)
DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
SET @xml =
(
SELECT *
FROM OPENROWSET(BULK @file, SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下操作(没有成功,因为执行 EXEC 时局部变量(@xml)似乎超出了范围):
DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
DECLARE @bulk NVARCHAR(MAX) = 'SET @xml = (SELECT * FROM OPENROWSET(BULK ''' + @file + ''', SINGLE_BLOB) AS data)'
EXEC (@bulk)
Run Code Online (Sandbox Code Playgroud)
我猜我需要使用临时表,但是如何使用?