【问题标题】:Trouble joining tables with LIKE condition使用 LIKE 条件连接表时遇到问题
【发布时间】:2023-01-17 17:28:03
【问题描述】:

需要有关在 2 个表之间查找的 sql 脚本的帮助,但连接列不完全批处理。

表格1

FileName   Location

abc        C:\file

abc_TR     C:\fileTR

xyz        C:\file

表2

FileName                TimeSentIn

abc_20230101            2023-01-01 15:35

abc_TR_20230101         2023-01-01 10:35

xyz_20230103            2023-01-01 15:30

rogert                  2023-01-01 15:31

footing_20230105-0545   2023-01-01 14:20

我需要输出为:

Table1.FileName    Table2.TimeSentIn

abc                2023-01-01 15:35

abc_TR             2023-01-01 10:35

xyz                2023-01-01 15:30

我可以使用任何 sql 脚本吗?我尝试在连接中使用 LIKE 条件,但这给了我 abc 和 abc_TR 的重复项

谢谢,

【问题讨论】:

  • 您使用的是什么版本的 SQL?例如。 MySQL、SQL Server、Oracle 等。
  • sql服务器,微软sql
  • 文件名字符串的 iso 日期部分代表什么?例如,为什么 xyz_20230103TimeSentIn 的日期不同?应该一样吗?如果是,您可以在匹配前将其删除。您是否总是有最右边的部分前面有需要删除的下划线?

标签: sql sql-server


【解决方案1】:

尝试这个:

DROP TABLE IF EXISTS file_location
DROP TABLE IF EXISTS file_sent


CREATE TABLE file_location (
  FileName VARCHAR(255) NOT NULL,
  Location VARCHAR(255) NOT NULL
);

INSERT INTO file_location (FileName, Location)
VALUES ('abc', 'C:\file'), ('abc_TR', 'C:\fileTR'), ('xyz', 'C:\file');

CREATE TABLE file_sent (
  FileName VARCHAR(255) NOT NULL,
  TimeSentIn DATETIME NOT NULL
);

INSERT INTO file_sent (FileName, TimeSentIn)
VALUES ('abc_20230101', '2023-01-01 15:35:00'), ('abc_TR_20230101', '2023-01-01 10:35:00'), ('xyz_20230103', '2023-01-01 15:30:00'), ('rogert', '2023-01-01 15:31:00'), ('footing_20230105-0545', '2023-01-01 14:20:00');


SELECT file_location.FileName
     , file_location.Location
     , file_sent.TimeSentIn
FROM file_location
JOIN file_sent 
  ON file_location.FileName = REVERSE(SUBSTRING(REVERSE(file_sent.FileName), 10, LEN(file_sent.FileName)));

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 2019-07-14
    • 2016-11-26
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多