在 UPDATE 语句中使用 Right() 或 Substr()

Using Right() or Substr() in an UPDATE statement

我有两个表:

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)    

第二个Table:

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 Table 的字段 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" 

谁能说说哪里错了?

看来您需要字符串的最后 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" 字符串)。