AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[string](dba)

Martin Hope
Leon
Asked: 2022-09-16 21:59:11 +0800 CST

如何防止 CONCAT 函数在 Postgresql 中添加空间?

  • 0

Postgresql-11

select tick_time, nano_secs,
    concat( to_char(tick_time, 'MMDD HH24:MI:SS.US'),
            to_char(nano_secs, '000') )
from ticks
order by tick_time, nano_secs limit 100;

我想像上面那样连接 2 个字符串,但它总是在两个字符串之间添加一个空格字符。

如何防止它这样做?

谢谢!

postgresql string
  • 1 个回答
  • 17 Views
Martin Hope
Adelina Andreea trandafir
Asked: 2022-06-06 06:01:30 +0800 CST

从文字 HEX 值转换为 INT MariaDB

  • 0

我有一种情况,我需要从文字十六进制中获取整数值。示例:“ff”等于十进制的 255,但如果我使用 HEX(“ff”) 函数,它返回 6666。是否可以让它返回 255?比如 a=10, b=11... 等等

谢谢

mariadb string
  • 1 个回答
  • 32 Views
Martin Hope
Nate
Asked: 2021-05-25 13:02:47 +0800 CST

文本列比较等于 where 子句但不选择匹配行

  • 6

查询生产数据库中的表时遇到问题。一个文本列将与我们在 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)

当我们处理名称列表时,我们检查它们是否已经在表中,以防止重复添加和违反主键约束。

但是,在一个名称“Сергей Иванович МЕНЯЙЛО”上,查看该名称是否已存在的查询返回一个空集
,我希望返回具有相同名称的行。但是,当我们尝试在表中插入行时,我们会遇到主键冲突

以下是一些可以更好地解释问题的查询

(PROD)=> SELECT name_index, 
    name, 
    name = 'Сергей Иванович МЕНЯЙЛО' names_compare_equal 
FROM names where name_index = 75128;
      name_index      |          name           | names_compare_equal
----------------------+-------------------------+---------------------
                75128 | Сергей Иванович МЕНЯЙЛО | t
(1 row)

但是,在名称列上进行过滤不会选择任何行。

2021-05-24 20:37:41 UTC
(PROD)=> SELECT name_index, 
    name, 
    name = 'Сергей Иванович МЕНЯЙЛО' 
    names_compare_equal 
FROM names 
WHERE name = 'Сергей Иванович МЕНЯЙЛО';

       name_index     | name | names_compare_equal
----------------------+------+---------------------
(0 rows)

因此,如果我们尝试插入行,我们会遇到主键冲突:

(PROD)>=> INSERT INTO names (name_index, name, processed_name, when_created) 
  VALUES (89266, 'Сергей Иванович МЕНЯЙЛО', lower('Сергей Иванович МЕНЯЙЛО'), now());

ERROR:  duplicate key value violates unique constraint "names_pkey"
DETAIL:  Key (name, processed_name)=(Сергей Иванович МЕНЯЙЛО, сергей иванович меняйло) already exists.

更重要的是,如果我根据行的哈希进行查询,我会得到正确的结果:

(PROD)=> SELECT name_index, 
    name, 
    name = 'Сергей Иванович МЕНЯЙЛО' names_compare_equal 
FROM names 
WHERE md5(name) = md5('Сергей Иванович МЕНЯЙЛО');

      name_index      |          name           | names_compare_equal
----------------------+-------------------------+---------------------
                75128 | Сергей Иванович МЕНЯЙЛО | t
(1 row)

这只发生在我们的生产数据库上 - 它具有以下编码设置

      Name      |     Owner      | Encoding |   Collate   |    Ctype    |
----------------+----------------+----------+-------------+-------------+
 PROD DB        | PROD DB OWNER  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

这对我来说非常莫名其妙,所以关于下一步要检查什么的想法会很有帮助

postgresql string
  • 1 个回答
  • 311 Views
Martin Hope
Rachit Singh
Asked: 2020-08-09 02:28:26 +0800 CST

对单个列执行 SQL 字符串操作

  • 2

我最近在一次面试中遇到了一个我无法回答的问题。要求是编写一些 SQL 来获取两个小数点后的前三个数字。

例如: 输入表:

IP address
1.2.3.4.5
11.22.33.44.55
5.6.7.8.9
111.222.333.444
.
.
.
Output table:
IP address
1.2.3
11.22.33
5.6.7
111.222.333
.
.

我最初的方法是使用内置的子字符串。例如:从表中选择 substring(ip,0,5)。但这是一个错误的逻辑,因为它没有考虑 11.22.33 或 111.222.333 等值

如何做到这一点?

mysql string
  • 1 个回答
  • 29 Views
Martin Hope
shawnyshawny
Asked: 2019-02-22 05:40:33 +0800 CST

SQL Server 2017 - 在包含列映射的字符串中提取源和目标列名称

  • 0

我将以下格式字符串存储在文本中(可以是任意数量的列):

col1_source|col1_target;col2_source|col2_target;col3_source|col3_target;...

我试图想出一种优雅的方法来提取和隔离所有 xxx_source 列名和所有 xxx_target 列名,以便我可以将它们存储在变量中并获得以下最终结果:

@Source_Columns = 'col1_source,col2_source,col3_source' @Target_Columns = 'col1_target,col2_target,col3_target'

在一天结束时,我想对我的源列和目标列执行 SELECT 以执行数据比较。

这是我到目前为止所取得的成就,但我发现它太复杂了(使用表值函数):

CREATE FUNCTION [dbo].[UF_miscParseStringToTable]
    (
        @list   nvarchar(MAX)
        , @sep  varchar(8) 
    ) 
RETURNS @ts table
    (
        [ID]        int identity
        , [value]   nvarchar(MAX)
    )
AS 
BEGIN 

    -- Parameters check
    if ((@sep is null) or (datalength(@sep) < 1)) return 

    if ((@list is null) or (@list = '') or (@list = @sep)) return

    -- Add path wildcards directly with sep
    -- ?worth it?
    if (left(@sep, 1) <> '%')   set @sep = '%' + @sep
    if (right(@sep, 1) <> '%')  set @sep = @sep + '%'

    -- First first sep
    declare @i int
    set @i = patindex(@sep, @list)

    -- Acc values
    while (@i > 0) begin
        insert into @ts ([value]) values (rtrim(left(@list, @i - 1)))
        set @list = ltrim(right(RTRIM(@list), len(@list) + 3 - (@i + len(@sep) )))
        set @i = patindex(@sep, @list)
    end

    set @list = rtrim(@list)
    -- Insert last value, if any
    if (@list <> '') insert into @ts (value) values (@list)

    return

END

上面的函数基本上采用我的映射字符串并将其转换为表中的列名列表(请参见下面的查询逻辑):

DECLARE @Delim varchar(1) = '|'
DECLARE @Mapping varchar(max) = 'col1_source|col1_target;col2_source|col2_target;col3_source|col3_target'  
DECLARE @String varchar(max) = REPLACE(@Mapping,';', @Delim)
SELECT * FROM dbo.UF_miscParseStringToTable(@String, @Delim)

以上结果查询产生下表:

 ID| value
 1 | col1_source
 2 | col1_target
 3 | col2_source
 4 | col2_target
 5 | col3_source
 6 | col3_target

我也许可以对列索引进行联接,但是我发现很难隔离源字段和目标字段以便我可以在它们之间执行数据比较。此外,如果不需要的话,我想避免对表执行额外的连接。

以下是所需的结果(以便能够执行以下操作):

SELECT col1_source, col2_source, col3_source FROM mytable;

SELECT col1_target, col2_target, col3_target FROM mytable;

任何帮助或想法都会很棒!

肖恩

string sql-server-2017
  • 1 个回答
  • 157 Views
Martin Hope
Shams Observer
Asked: 2018-12-24 01:48:02 +0800 CST

如何在多个记录中截断 X 个字符?

  • 0

大家好!我有一个包含城邦格式地理位置的字段:

  1. 马萨诸塞州波士顿
  2. 加利福尼亚州洛杉矶
  3. 蒙大拿海伦娜
  4. ...

该字段跨越大约 230 条记录。我的任务是砍掉每条记录中的最后四个字符。我该怎么做?有任何想法吗?谢谢!

sql-server string
  • 2 个回答
  • 45 Views
Martin Hope
E.Rawrdríguez.Ophanim
Asked: 2018-09-13 11:56:25 +0800 CST

如何将多行结果集转换为以逗号分隔的单行文本

  • -2

我正在使用这个查询

select Name, valueType from mytable where ID = 1

并获取此表:

在此处输入图像描述

但我需要将结果集转换成类似的东西:

'idGasto int, noTicket string, fechaFact string, ..., etc.'

你有什么建议吗?

sql-server string
  • 2 个回答
  • 205 Views
Martin Hope
Emanuel
Asked: 2018-04-06 21:45:38 +0800 CST

查找是否有任何行部分匹配字符串

  • 13

我想看看一个表是否包含给定字符串的任何子字符串。

假设我有一个字符串

somedomain.com 

在数据库中我有:

blabladomain.com
testdomain.com
domain.com

我需要进行一个查询,该查询将返回“domain.com”,因为它是“somedomain.com”的子字符串。

我不知道这在 MySQL 中是否可行。

CREATE TABLE `site_core_antispam_banned_domain` (
`domain_id` int(11) NOT NULL AUTO_INCREMENT,
`domain_name` varchar(255) NOT NULL,
PRIMARY KEY (`domain_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
mysql string
  • 4 个回答
  • 61200 Views
Martin Hope
tinlyx
Asked: 2018-03-17 23:43:44 +0800 CST

测试一个字符串是否是一个有效的、不带引号的标识符?

  • 3

我只是想知道是否有一种既定的方法来测试字符串是否可以用作不带引号的PostgreSQL 标识符?(不加引号是因为几乎任何字符串都可以是带引号的标识符)。

我问是因为如前一个问题(How to quote qualified table name with format() function?)所示,有时我需要指定一个标识符(例如要创建的表的名称)而不是还存在,作为字符串值 ( text) 而不是更安全的类型,例如regclass. 引用字符串/名称可能会出现问题,如此处和其他地方所示。没有引用,它容易受到 SQL 注入的影响。

我想如果一个程序足够难,最终可以编写一个字符串解析函数。只是想检查是否有现有的解决方案。

有关的:

PostgreSQL 模式名称的有效格式是什么?

函数 PARSENAME() 是 QUOTENAME() 的对立面吗(sql-server)

postgresql string
  • 1 个回答
  • 409 Views
Martin Hope
Roots
Asked: 2017-09-09 11:13:05 +0800 CST

SQL 正则表达式 PostgreSQL

  • 1

让我们考虑这样一个表:

id |            name
 1 | This is a test sentence
 2 | is a sentence TeST
 3 | This a IS test sentence
 4 | iS a tEst sentence tHis
 5 | This a test sentence is

我怎样才能得到所有的行,搜索“是一个句子测试”?

我在用:

SELECT *
FROM table
WHERE name ILIKE '%is%' AND name ILIKE '%a%' AND name ILIKE '%sentence%' AND name ILIKE '%test%'

但这似乎不是最好的方法。

postgresql string
  • 2 个回答
  • 399 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve