【问题标题】:Using Right() or Substr() in an UPDATE statement在 UPDATE 语句中使用 Right() 或 Substr()
【发布时间】:2021-07-15 03:38:51
【问题描述】:

我有两张桌子:

Add_T
Add_ID   NUMBER(10,0)       
Add_GEOMETRY    SDO_GEOMETRY            
STRTN    VARCHAR2(40 BYTE)       
CITY      VARCHAR2(45 BYTE)         
STATE     VARCHAR2(2 BYTE)      
ZIPCODE   VARCHAR2(10 BYTE)     
HC_ID   NUMBER(10,0)        
P_ID    NUMBER(10,0)    

第二张桌子:

HC_T
HC_GEOMETRY    SDO_GEOMETRY 
HC_ID     NUMBER(10,0)
TYPE      VARCHAR2(2 BYTE)
FACY     NUMBER(10,0)
COORD_X   NUMBER(15,0)
COORD_Y     NUMBER(15,0)

我需要更新Add_T表的HC_ID字段,我使用以下SQL语句:

 update add_t set hc_Id = ( SELECT HC_ID FROM HC_T
 WHERE ADD_T.P_ID = HC_T.FACY  AND
 HCO_T.TYPE='R' ) WHERE hc_ID IS NULL and
 subtr(strtn,-4,4) = "-LOC"

它不起作用。另外,我使用了right() 函数,也得到了错误的结果。

 update add_t set hc_Id = ( SELECT HC_ID FROM HC_T
 WHERE ADD_T.P_ID = HC_T.FACY  AND
 HCO_T.TYPE='R' ) WHERE hc_ID IS NULL and
 RIGHT(strtn,4) = "-LOC" 

谁能说错在哪里?

【问题讨论】:

  • Oracle 没有right() 字符串函数,所以我遗漏了一些东西。
  • SUBSTR(strtn, -4, 4) 在我看来不合适。此外,您说您需要更新,但没有准确解释您要做什么,并且 It doesn't work 不是有意义的问题描述。 Oracle 似乎也没有right() 函数。请edit您的问题更清晰具体。

标签: sql oracle oracle11g


【解决方案1】:

看起来您需要字符串的最后 4 个字符。如果是这样,那么你会

UPDATE add_t
   SET hc_id =
          (SELECT hc_id
             FROM hc_t
            WHERE     add_t.p_id = hc_t.facy
                  AND hco_t.TYPE = 'R')
 WHERE     hc_id IS NULL
       AND SUBSTR (strtn, -4) = '-LOC';

因为例如

SQL> SELECT SUBSTR ('some string', -4) FROM DUAL;

SUBS
----
ring

SQL>

(另请注意,您将在 Oracle 中将字符串括在 单引号 中,而不是双引号(就像您尝试使用 "-LOC" 字符串一样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2021-04-11
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多