【问题标题】:I need help in filtering the content of this SQL column我需要帮助来过滤此 SQL 列的内容
【发布时间】:2019-12-26 16:19:27
【问题描述】:

我需要帮助来过滤此 SQL 列的内容。不幸的是,到目前为止我一直没有成功。我很乐意为您提供任何帮助。

我的目标是让所有 unc 路径都采用相同的格式。 所有应该看起来像:\\ps9\wa033242。这意味着所有内容都应该以“\\”开头,替换“///”

我尝试截断它,但由于字符串长度不同,我遇到了问题。

我尝试截断和更新

SELECT
    cw_platz.nummer,
    cw_platz.nwaddress,
    cw_platz.bezeichnung,
    os_cw.cw_ldzuplatz.ldruckernr,
    os_cw.cw_ldzuplatz.papierschacht,
    os_cw.cw_ldzuplatz.treibername,
    cw_logischerdrucker.bezeichnung
FROM
    cw_platz,
    os_cw.cw_ldzuplatz,
    cw_logischerdrucker
WHERE
    cw_platz.nummer = os_cw.cw_ldzuplatz.platznr and
    cw_logischerdrucker.nummer = os_cw.cw_ldzuplatz.ldruckernr and
    cw_platz.bezeichnung in cw_platz.bezeichnung

这是我的结果:

【问题讨论】:

  • 不要将数据样本发布为图像 .. 发布为文本
  • 今日提示:始终使用现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。
  • 您使用的是哪个 dbms? (在字符串处理方面,许多产品都有自己的功能。)
  • 也指定预期结果。 (作为格式化文本 - 不需要图像。)
  • 你好。我正在使用 SQL 开发人员。

标签: sql oracle filtering


【解决方案1】:

你可以使用替换

select  replace('client/ps9///wa033242//', '/' ,'\');. 

为了更新

update  your_table  
set your_column = replace(your_column,  '/' ,'\')

尽量避免..喜欢的地方

UPDATE os_cw.cw_ldzuplatz
SET os_cw.cw_ldzuplatz.treibername = REPLACE(os_cw.cw_ldzuplatz.treibername,  '/' ,'\')
 FROM
    cw_platz,
    os_cw.cw_ldzuplatz,
    cw_logischerdrucker
WHERE
    cw_platz.nummer = os_cw.cw_ldzuplatz.platznr and
    cw_logischerdrucker.nummer = os_cw.cw_ldzuplatz.ldruckernr and
    cw_platz.bezeichnung = cw_platz.bezeichnung

【讨论】:

  • 什么意思'它不起作用'..你有错误吗?显示错误消息 .. 错误结果 .. 显示清晰的数据样本(作为文本 ..而不是图像)您的实际结果和预期结果
  • 更新 os_cw.cw_ldzuplatz SET os_cw.cw_ldzuplatz.treibername = REPLACE(os_cw.cw_ldzuplatz.treibername, '///','\\') FROM cw_platz, os_cw.cw_ldzuplatz, cw_logischerdrucker WHERE cw_platz.nummer = os_cw.cw_ldzuplatz.platznr 和 cw_logischerdrucker.nummer = os_cw.cw_ldzuplatz.ldruckernr 和 cw_platz.bezeichnung 在 cw_platz.bezeichnung 和 TREIBERNAME like '///%'
  • 你对我没有意义 .. .. 如果你有错误显示错误信息 ..
  • ORA-00933: SQL-Befehl wurde nicht korrekt bedet 00933. 00000 - “SQL 命令未正确结束” *原因:*操作:Fehler 在 Zeile:19 Spalte:1
  • 答案已更新 .. 带有建议和不同的斜线模式 '/' ,'\'
【解决方案2】:

试试这个对你有帮助。

UPDATE os_cw.cw_ldzuplatz
SET os_cw.cw_ldzuplatz.treibername = REPLACE(os_cw.cw_ldzuplatz.treibername, '\\','///') 
 FROM
    cw_platz,
    os_cw.cw_ldzuplatz,
    cw_logischerdrucker
WHERE
    cw_platz.nummer = os_cw.cw_ldzuplatz.platznr and
    cw_logischerdrucker.nummer = os_cw.cw_ldzuplatz.ldruckernr and
    cw_platz.bezeichnung = cw_platz.bezeichnung
and TREIBERNAME like '\\%'

【讨论】:

  • 我按照先生的建议做了,但失败了。 UPDATE os_cw.cw_ldzuplatz,cw_platz, cw_logischerdrucker SET treibername = REPLACE(treibername, '\\','///') WHERE TREIBERNAME like '\\%'
  • 因为涉及到三个表。
  • 你好,我上面贴的原始代码显示有三个表。
  • UPDATE 关键字标记为红色。错误消息:SQL 命令未正确结束。
  • 我正在使用 SQL 开发人员。
【解决方案3】:

我的第一个想法是简单地使用 REPLACE(yourstringhere, '/','\') 之类的东西。 您是否已经尝试过?

参考:https://docs.microsoft.com/en-us/sql/t-sql/functions/replace-transact-sql?view=sql-server-2017

【讨论】:

  • 是的,我做到了。我使用了 UPDATE os_cw.cw_ldzuplatz,cw_platz,cw_logischerdrucker SET TRIEBERNAME = REPLACE('TRIEBERNAME', ('///', '\\');
  • 我做到了,但没有成功。
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多