我正在使用 PostgreSQL 9.5.6。我有空格分隔的多字串,我需要缩短说 3 个字?
我查看了文档,为了使用 substring() 函数,我需要知道要开始提取的字符的索引位置,但我正在使用的字符串长度不同。
我也看过 split_part() 并且只返回一个词。
我怎样才能得到类似的东西:
hello everyone out there somewhere
Run Code Online (Sandbox Code Playgroud)
缩短为
hello everyone out
Run Code Online (Sandbox Code Playgroud) I have a procedure in which i have declared a variable with datatype varchar(MAX),
declare @str varchar(MAX);
set @str='select * from Table1...'
print (@str);
exec (@str);
Run Code Online (Sandbox Code Playgroud)
but when the text written inside @str goes above 8000 characters (i.e. 8193 characters) it cuts off the string and prints only 8000 characters and executing it gives error off course.
I have tried 2 solutions after some search, but it doesn't work.
1) I have tried using 2 variables of same type "varchar(MAX)", …
我们在查询生产数据库中的表时遇到问题。一个文本列将与我们在 where 子句中过滤的字符串相等,但 postgres 不会选择该行。(我们在 postgres 11.11 上)我们的表设置如下:
(PROD)=> \d names;
Table "public.names"
Column | Type | Collation | Nullable | Default
----------------------+-----------------------------+-----------+----------+---------
name | text | | not null |
processed_name | text | | not null |
name_index | integer | | not null |
when_created | timestamp without time zone | | not null |
Indexes:
"names_pkey" PRIMARY KEY, btree (name, processed_name)
"names_name_index_key" UNIQUE CONSTRAINT, btree (name_index)
"ix_names_name" btree (name)
"ix_names_processed_name" btree (processed_name)
Run Code Online (Sandbox Code Playgroud)
当我们处理名称列表时,我们会检查它们是否已经在表中,以防止重复添加和违反主键约束。
然而,在一个名字上,'?????? ????????? ???????',查看名称是否已经存在的查询返回一个空集, …
鉴于以下 CREATE TABLE 语句:
CREATE TABLE [dbo].[Unit]
(
[id] SMALLINT NOT NULL IDENTITY(1,1),
[name] VARCHAR(100) NOT NULL,
CONSTRAINT [PK_Unit] PRIMARY KEY CLUSTERED ([id]),
CONSTRAINT [UQ_Unit_Name] UNIQUE ([name])
)
Run Code Online (Sandbox Code Playgroud)
如何在不违反 UNIQUE 约束的情况下允许以下两个字符串共存?
INSERT INTO dbo.Unit (Name) VALUES('e³m³/day')
INSERT INTO dbo.Unit (Name) VALUES('e3m3/day')
Run Code Online (Sandbox Code Playgroud)
任何见解表示赞赏。
编辑
当前整理是 Latin1_General_CI_AS
编辑
除非有人有更好的选择,否则我似乎必须使用 Latin1_General_BIN 并在我需要的几个地方手动处理 CI……如果没有提供更好的解决方案,我会将其转换为答案。
sql-server constraint sql-server-2008-r2 string unique-constraint
我试图找到 Postgresql 中字符串数据类型的转义序列的完整列表的文档。例如,如果您需要转义带引号的字符串内的引号字符,则可以使用\". 不同的 DBMS 使用不同的术语,因此我很难找到要搜索的内容。
我找到了这个,但对我来说它看起来并不详尽。在此链接中,搜索“COPY FROM 可识别以下特殊反斜杠序列”。
http://www.postgresql.org/docs/9.5/static/sql-copy.html
我知道这并不详尽。在这里查看\\角色:
http://www.postgresql.org/docs/8.3/static/sql-syntax-lexical.html
然后查看此链接中的“4.1.2.2. String Constants with C-style Escapes”。另请阅读“注意”中所写的内容。这让我变得谦虚,我希望对其他人也是如此。
http://www.postgresql.org/docs/9.2/static/sql-syntax-lexical.html
如果我在这样的表中的行的列中有一个字符串
1 2 2 2 2 2 2
Run Code Online (Sandbox Code Playgroud)
我如何计算字符串2中子字符串的出现次数。假设除了空格分隔符 之外没有其他任何内容" "。
为此,我们将数字视为子字符串
CREATE TABLE foo
AS
SELECT 1 AS id, '1 2 2 2 2 2 2'::text AS data;
TABLE foo
id | data
----+---------------
1 | 1 2 2 2 2 2 2
Run Code Online (Sandbox Code Playgroud) 我有一个带有 . 作为分隔符,它看起来像这样......
abc.efg.hij
Run Code Online (Sandbox Code Playgroud)
我想要一个将其转换为三列 Col1、Col2 和 Col3 的查询。我想知道最快的方法是什么。到目前为止,由于我有限的数据库经验,我还没有做得很好。我有一个功能:
CREATE FUNCTION [dbo].[split](
@delimited NVARCHAR(MAX),
@delimiter NVARCHAR(100)
) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'
INSERT INTO @t(val)
SELECT r.value('.','varchar(MAX)') as item
FROM @xml.nodes('/t') as records(r)
RETURN
END
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在做的事情,但我相信它可以做得更快,我也愿意接受明显更好的功能或用于拆分字符串的开箱即用的想法。我相信我已经运行dbo.split(Name, '.')了三遍并且只能运行一次。
SELECT
Col1 = (SELECT Val from dbo.split(Name, '.') WHERE Id = '1'),
Col2 = (SELECT Val from dbo.split(Name, '.') WHERE Id = '2'),
Col3 = …Run Code Online (Sandbox Code Playgroud) performance sql-server azure-sql-database functions string query-performance
在 SQL Server 上是否有与 PostgreSQL 的Dollar-quoted String Constants等价的东西?
我想输入可能包含单引号或双引号的 HTML 字符串文字。
例子:
UPDATE table_name
SET column_name = $$
Here's a string that contains "double quotes".
$$
WHERE condition = true
Run Code Online (Sandbox Code Playgroud)
编辑:
我问这个的原因是因为我想更新一些存储在数据库中的相当大的 HTML“Web 部件”(糟糕!)。因为在工作中我们使用那种 CMS(我不会给你它的名字)。所以我不想每次都逃避我的单引号。这就是为什么我要问这种功能的原因。如果我理解正确,QUOTENAME仍然需要我将单引号加倍。
这里我们有两组数字。问题是我无法弄清楚如何从数字的输入到输出(下面的 DDL 和 DML 以及这里的小提琴)。
current_data
1,2,3
1,4
1,5,7
8,9,10
10,11,15
expected_outcome
1,2,3,4,5,7
8,9,10,11,15
Run Code Online (Sandbox Code Playgroud)
我们只是尝试根据单个数字是否与任何其他组匹配来匹配一组数字。然后合并所有这些组。
例如。
如果我们有:
('1,2,3'),
('1,4'),
('1,5,7')
Run Code Online (Sandbox Code Playgroud)
我们想要:
(1,2,3,4,5,7)
Run Code Online (Sandbox Code Playgroud)
我们将它们合并为 PostgreSQL 中的一行。
或(另一个例子):
('8,9,10'),
('10,11,15')
Run Code Online (Sandbox Code Playgroud)
所需的输出:
(8,9,10,11,15)
Run Code Online (Sandbox Code Playgroud)
查询将对这些数字进行分组,因为它们的共同点是数字 10。但它不会与(1,2,3,4,5,7)不共享数字的前一行(即)分组。
当我们将这些组放在一张表中时。如果他们在每一组中至少有一个匹配的号码,他们才会分组在一起。
======== DDL 和 DML ============
create table current (current_data text not null);
create table expected_output (expected_outcome text not null);
insert into current (current_data) values ('1,2,3'),('1,4'),('1,5,7'),('8,9,10'), ('10,11,15');
insert into expected_output (expected_outcome) values ('1,2,3,4,5,7'),('8,9,10,11,15');
Run Code Online (Sandbox Code Playgroud) 我有一个 SQL Server 数据库,其中有一个带有分隔符 ( \) 分隔字符串的单元格。这个字符串的一个例子是:
category_path
=============
RootCategory\Middle Category\Child Category\Child of child category
RootCategory\Middle Category\Other Child Category\
Run Code Online (Sandbox Code Playgroud)
有很多这样的类别路径。我想将它们全部解析到另一个表中:
category_name parent_path
====================================
RootCategory null
Middle Category RootCategory
Child Category RootCategory\Middle Category
Child of child category RootCategory\Middle Category\Child Category
Other Child Category RootCategory\Middle Category
Run Code Online (Sandbox Code Playgroud)
我在这里省略了重复项,但结果可能包含重复项(稍后我需要将光标移到该表的行上,我可以在那里调用 distinct )。
网络上有很多字符串被简单分割的例子。(例如此处)我正在考虑编写一个查询,在其中拆分字符串,将光标移到结果上并在每一步中累积 parent_path,但这似乎非常不理想。
有没有一种解决方案,我不必为一个简单的字符串声明这么多游标?
使用 T-SQL,我试图找到最简单的方法来反转字符串的字符而不改变数值的位置。
所以对于字符串:
abc223de11
Run Code Online (Sandbox Code Playgroud)
有
edc223ba11
Run Code Online (Sandbox Code Playgroud) 我是一名学生,致力于从工作中的 SQL 服务器中提取某些信息。我没有系统管理员权限,我尝试接收它们也没有成功。这是一家大公司,围绕这些事情的官僚主义简直是荒谬的,所以这不是一个选择。
我想运行一个已经由这台计算机上的一个程序执行的查询,但参数略有不同(加入更多的表等)。数据库庞大且极其复杂,因此我一直无法理解该程序如何获取它所获取的信息。
所以我的问题是:有没有办法监控从我的计算机发送的查询,特别是查询文本?这将非常有帮助,并为我节省时间、精力和大量繁文缛节。
(我意识到这可能看起来像一个愚蠢的问题,或者我问的是不可能的 - 如果它不能完成,那没什么大不了的 - 没有它我也能过得去。不过,这会很好。)
我正在使用 Postgres 9.5。我有一个表,其中有一列记录 URL。有时 URL 具有查询字符串,有时则没有。我想提取 URL,减去任何查询字符串,所以我想出了:
select substring(url, 0, case position('?' in url) when 0 then length(url)+1 else position('?' in url) end)
from article;
Run Code Online (Sandbox Code Playgroud)
这看起来有点罗嗦,我想知道是否有更简洁的方法来做到这一点。我的表列是类型TEXT。
string ×13
postgresql ×7
sql-server ×6
array ×2
substring ×2
t-sql ×2
constraint ×1
count ×1
functions ×1
performance ×1
select ×1