sql-server - 什么是编码(, 'escape') SQL Server 中的 PostgreSQL 等价物?
问题描述
与这个问题SQL Server
相同,以下Postgres
陈述的等价物是什么?
select encode(some_field, 'escape') from only some_table
解决方案
如果您需要此功能,则由您来实现它。假设您只需要该escape
变体,您可以尝试将其实现为 T-SQL UDF。但是将字符串分开,逐个字符地工作并构建一个新字符串并不是 T-SQL 的优势。您将查看一个WHILE
循环来计算输入字节长度的长度,SUBSTRING
提取各个字节,并CHAR
直接转换不需要八进制编码的字节。1
如果您打算开始这条路线(特别是如果您想支持其他格式),我会考虑使用SQL Server 中的 CLR 支持,以 .NET 语言创建函数(通常首选 C# ) 并在那里使用更丰富的字符串操作功能。
以上都假设您真正想要的是escape
复制encode
. 如果您只想“获取此二进制数据并给我一个安全的字符串来表示它”,只需使用CONVERT
来获取二进制十六进制编码。
1这是我的尝试。我建议您在愤怒使用它之前进行大量测试和调整:
create function Postgresql_encode_escape (@input varbinary(max))
returns varchar(max)
as
begin
declare @i int
declare @len int
declare @out varchar(max)
declare @chr int
select @i = 1, @out = '',@len = DATALENGTH(@input)
while @i <= @len
begin
set @chr = SUBSTRING(@input,@i,1)
if @chr > 31 and @chr < 128
begin
set @out = @out + CHAR(@chr)
end
else
begin
set @out = @out + '\' +
RIGHT('000' + CONVERT(varchar(3),
(@chr / 64)*100 +
((@chr / 8)%8)*10 +
(@chr % 8))
,3)
end
set @i = @i + 1
end
return @out
end
推荐阅读
- scala - 使用 scala 从 spark 中删除 bigquery 表
- javascript - 如何使用 JavaScript 复制 HTML 元素
- amazon-web-services - 当我在域名前不使用 https 时,SSL 认证不起作用
- azure-functions - 在 Azure Functions 中使用时 FluentEmail (2.8.0) 中的 RazorLight.RazorLightException
- python - 如何在 python tkinter 中一次显示一个窗口?
- python - 想要在python中的另一个字符串中找到模式(子字符串)开始的位置
- r - R中的相对频率直方图
- php - 致命错误:无法在 PHP 中的写入上下文错误中使用函数返回值
- java - 如何在用户输入输入之前运行while循环?
- here-api - HERE API 自动建议 503 服务不可用