我varchar
在 SQL Server 的表中有一个列,其中包含一个 base64 编码的文本字符串,我想将其解码为纯文本等效项
SQL Server 是否具有处理此类事情的任何本机功能?
一个示例 base64 字符串:
cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==
Run Code Online (Sandbox Code Playgroud)
解码为:
role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
Run Code Online (Sandbox Code Playgroud) sql-server t-sql sql-server-2008-r2 cast string-manipulation
我在 SQL Server 2014 上,我需要从列内容的开头和结尾清除空格,其中空格可以是简单的空格、制表符或换行符(\n
和\r\n
);例如
' this content ' should become 'this content'
' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content'
Run Code Online (Sandbox Code Playgroud)
等等。
我只能实现第一个案例
UPDATE table t SET t.column = LTRIM(RTRIM(t.column))
Run Code Online (Sandbox Code Playgroud)
但对于其他情况,它不起作用。
SQL Server 2016 引入了STRING_SPLIT,它非常快,是人们在 2016 年之前推出的任何自制实现的绝佳替代品。
不幸的是,STRING_SPLIT 只支持单字符分隔符,这并不总是足够的。有谁知道允许在分隔符中使用多个字符的良好实现?
我有一张这样的表:
身份证 | 普罗平西 | 哥打 | _________________________ 1 | 亚齐 | 登巴萨 2 | 亚齐 | 班达亚齐 3 | 苏门答腊 | 阿萨汉
这个表有很多行。问题是我想Kota
为所有行替换列中文本之前的空格,如下所示:
身份证 | 普罗平西 | 哥打 | _________________________ 1 | 亚齐|登巴萨 2 | 亚齐|班达亚齐 3 | 苏门答腊|阿萨汉
我搜索了谷歌,replace
MySQL中的功能只影响一行:
SELECT REPLACE(string_column, 'search', 'replace') as Kota
Run Code Online (Sandbox Code Playgroud)
有人可以解决我的问题吗?
简而言之,我有一个包含普通散文的 Postgres 列,我想确定所有行中x
最常用的单词(“单词”是由空格分隔的一组字符,但不是停用词)。
我找到了两个几乎达到目标的解决方案:
SELECT *
FROM ts_stat($$SELECT to_tsvector('english', title) FROM item$$)
ORDER BY ndoc DESC
LIMIT 50;
Run Code Online (Sandbox Code Playgroud)
这很好,除了它返回词干。
SELECT UNNEST(string_to_array(title, ' ')) AS word, COUNT(*) AS ct
FROM item
GROUP BY 1
ORDER BY 2 DESC
LIMIT 50;
Run Code Online (Sandbox Code Playgroud)
这个返回完整的词,但包括停用词。
为简单起见:应该在 上找到停用词TABLE stop_words (lowercase_stopword text PRIMARY KEY)
。
有人可以帮我上网吗?
在问题MS-SQL 上是否有任何(隐藏的)内置函数来取消引用对象名称?作者正在寻求有关是否存在“取消引用”引用字符串的内部函数的建议。作者McNets已经注意到,一些内部函数可以处理引用(例如[MyTable]
)和未引用(例如)MyTable
传递的参数值(例如OBJECT_ID()
)。
在David Browne - Microsoft给出的答案 ( 1 ) 中,引述如下:
... QUOTENAME 的反面是 PARSENAME,它具有导航多部分名称的附加功能。
我不同意这部分答案的以下评论:
我不同意,你可以修改传递给一个参数
PARSENAME()
来显示多部分的部分标识是它的SERVER
,DATABASE
,SCHEMA
或OBJECT
部分。但恕我直言,PARSENAME
与此相反的说法QUOTENAME
有点牵强。
我现在的问题是:
函数PARSENAME()
是相反的QUOTENAME()
吗?
我正在使用 SQL Server 2014 并且我有一个包含一列包含CSV字符串的表:
110,200,310,130,null
Run Code Online (Sandbox Code Playgroud)
该表的输出如下所示:
我想选择第二列作为多列,将 CSV 字符串的每个项目放在一个单独的列中,如下所示:
所以我创建了一个用于拆分字符串的函数:
create FUNCTION [dbo].[fn_splitstring]
(
@List nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Value nvarchar(100)
)
AS
BEGIN
while (Charindex(@SplitOn,@List)>0)
begin
insert into @RtnValue (value)
select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
end
insert Into @RtnValue (Value)
select Value = ltrim(rtrim(@List))
return
END
Run Code Online (Sandbox Code Playgroud)
我想像这样使用它:
select Val , (select value from tvf_split_string(cchar1,',')) from table1
Run Code Online (Sandbox Code Playgroud)
但是上面的代码显然行不通,因为该函数将返回多于一行,导致子查询返回多于一个值并破坏代码。
我可以使用类似的东西:
select Val ,
(select value from …
Run Code Online (Sandbox Code Playgroud) 我想过滤一个nvarchar
字段以仅返回数值。
我有一些 SQL 可以做到这一点,但它似乎比它需要的要复杂得多。我有兴趣找出是否有人有更好的方法来过滤掉字符串中的任何非数字字符?
IF OBJECT_ID('tempdb..#MOB') IS NOT NULL
BEGIN
DROP Table #MOB
END
SELECT [mob]
INTO #MOB
FROM (
SELECT '(00) 1234 5678' AS [mob]
UNION
SELECT '1234 5678' AS [mob]
UNION
SELECT '+61 012 345 678' AS [mob]
) AS temp
;WITH [fill] ([Num], [Index], [MOBILEPHONE])
AS
(
SELECT
CASE
WHEN [MOBILEPHONE] IS NOT NULL
THEN SUBSTRING([MOBILEPHONE], 1, 1)
ELSE NULL
END AS [Num]
, 1 AS [INDEX], [MOBILEPHONE]
FROM (
SELECT DISTINCT [mob] AS [MOBILEPHONE] …
Run Code Online (Sandbox Code Playgroud) 回答这个问题,
鉴于此表(根据问题构建):
CREATE TABLE wordcount (id SERIAL NOT NULL PRIMARY KEY, description TEXT NOT NULL);
INSERT INTO wordcount (description) VALUES ('What a great day');
INSERT INTO wordcount (description) VALUES ('This is a product. It is useful');
Run Code Online (Sandbox Code Playgroud)
产生这个结果:
id | word_count | unique_word_count | Description
---------+------------+-------------------+---------------
1 | 4 | 4 | What a great day
2 | 7 | 6 | This is a product. It is useful
Run Code Online (Sandbox Code Playgroud)
我给出了(正确的)答案,你可以在这里找到。
然而,在评论中,OP 然后又问了一个问题——如果有问题的字符串是['a', ' ', ' ', …
postgresql optimization string-manipulation query-performance
我正在从命令行运行 psql 脚本,其中的变量类似于:
psql ...... -v now_utc=$NOW_UTC
Run Code Online (Sandbox Code Playgroud)
然后我想在我的脚本中使用它,例如:
$$
DECLARE
_now_date timestamp := :now_utc;
BEGIN
-- do something
END
$$
Run Code Online (Sandbox Code Playgroud)
但我得到了一个错误,如:
Run Code Online (Sandbox Code Playgroud)syntax error at or near ':'
一旦我从:now_utc
变为now()
,脚本就很好,它就像一个魅力。
问题是如何将变量从命令行传递给 PL/pgSQL 代码?
sql-server ×6
postgresql ×3
t-sql ×3
cast ×1
csv ×1
functions ×1
mysql ×1
optimization ×1
plpgsql ×1
psql ×1