DM8的SQL使用基础-TRANSLATE应用

学习目标:

掌握TRANSLATE的用法


语法:

TRANSLATE 应用广泛,可实现字符替换。语法格式如下:

TRANSLATE(expr,from_string,to_string)

from_string 与 to_string 以字符为单位,对应字符逐个替换。示例语句如下所示:


演示案例:

在DM管理工具中或者disql中输入以下代码

 SELECT TRANSLATE ('ab你好bcadefg', 'abcdefg', '1234567') AS new_str FROM DUAL;


输出:

 

 演示案例:

如果 to_string 为空,则直接返回空值。示例语句如下所示:

 SELECT TRANSLATE ('ab你好bcadefg', 'abcdefg', '') AS new_str FROM DUAL;


输出:

  演示案例:

如果 to_string 对应的位置没有字符,from_string 中列出的字符将会被删除。示例语句如下所示:

SELECT TRANSLATE('ab你好bcadefg','1abcdefg','1') AS new_str FROM DUAL;


输出:

 

按数字和字母混合字符串中的字母排序

为了实现混合字符串排序,首先需创建如下视图:

CopyCREATE OR REPLACE VIEW v AS
   SELECT postal_code || ' ' || city_id AS data FROM dmhr.location;

查询视图信息,示例语句如下所示:

CopySELECT * FROM v;

我们可以使用 translate 替换功能,把数字和空格都替换为空,然后再进行排序。示例语句如下所示:

Copy  SELECT data, TRANSLATE (data, '- 0123456789', '-') AS oper_type
    FROM v
   WHERE ROWNUM < 5
ORDER BY 2;

输出结果:

2025-05-19 19:49:46.154 [main] ERROR o.s.boot.SpringApplication - Application run failed java.lang.IllegalStateException: Failed to execute ApplicationRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:762) at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:749) at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) at com.iflytek.ctllm.gov.app.GovDocumentCoreServiceApplication.main(GovDocumentCoreServiceApplication.java:29) Caused by: org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: dm.jdbc.driver.DMException: 第 15 行, 第 20 列[COMMENT]附近出现错误: 语法分析出错 ### The error may exist in file [D:\project\GWZS\gov-document-core-service\gov-document-core-server\target\classes\mapper\dm\GovDocumentApplicationMapper.xml] ### The error may involve com.iflytek.ctllm.gov.app.dao.gov.GovDocumentApplicationMapper.createTable ### The error occurred while executing an update ### SQL: CREATE TABLE IF NOT EXISTS "GOV_DOCUMENT_APPLICATION" ( "ID" VARCHAR(50) NOT NULL, "APP_NAME" VARCHAR(50) NOT NULL, "APP_LOGO" CLOB, "APP_WELCOME_TEXT" VARCHAR(250) NOT NULL, "APP_GUIDE_TEXT" VARCHAR(250) NOT NULL, "APP_URL_PATH" VARCHAR(250) NOT NULL, "APP_STATUS" INT NOT NULL, "CREATED_TIME" BIGINT NOT NULL, "UPDATED_TIME" BIGINT NOT NULL, "IS_DELETED" BIT DEFAULT 0, PRIMARY KEY ("ID") ); COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."ID" IS '应用ID,表主键,GUID格式,唯一标识'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."APP_NAME" IS '应用名称'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."APP_LOGO" IS '应用Logo图标(Base64编码)'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."APP_WELCOME_TEXT" IS '应用欢迎语'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."APP_GUIDE_TEXT" IS '应用引导语'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."APP_URL_PATH" IS '应用地址(相对上下文地址)'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."APP_STATUS" IS '应用状态(1:启用;-1:停用)'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."CREATED_TIME" IS '应用创建时间(长整型)'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."UPDATED_TIME" IS '应用更新时间(长整型)'; COMMENT ON COLUMN "GOV_DOCUMENT_APPLICATION"."IS_DELETED" IS '是否删除(0:未删除;1:已删除)'; ### Cause: dm.jdbc.driver.DMException: 第 15 行, 第 20 列[COMMENT]附近出现错误: 语法分析出错 ; bad SQL grammar []; nested exception is dm.jdbc.driver.DMException: 第 15 行, 第 20 列[COMMENT]附近出现错误: 语法分析出错 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) at com.sun.proxy.$Proxy115.update(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:288) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:64) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) at com.sun.proxy.$Proxy118.createTable(Unknown Source) at com.iflytek.ctllm.gov.app.service.gov.impl.GovDocumentApplicationServiceImpl.createAndInitDefaultTable(GovDocumentApplicationServiceImpl.java:186) at com.iflytek.ctllm.gov.app.service.gov.impl.GovDocumentApplicationServiceImpl$$FastClassBySpringCGLIB$$afedce23.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) at com.iflytek.ctllm.gov.app.service.gov.impl.GovDocumentApplicationServiceImpl$$EnhancerBySpringCGLIB$$2e9e2d0e.createAndInitDefaultTable(<generated>) at com.iflytek.ctllm.gov.app.service.gov.impl.TableInitServiceImpl.initGovDocAllTable(TableInitServiceImpl.java:46) at com.iflytek.ctllm.gov.app.GovDocumentCoreServiceAppInitialization.run(GovDocumentCoreServiceAppInitialization.java:20) at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:759) ... 5 common frames omitted Caused by: dm.jdbc.driver.DMException: 第 15 行, 第 20 列[COMMENT]附近出现错误: 语法分析出错 at dm.jdbc.driver.DBError.throwException(DBError.java:708) at dm.jdbc.a.b.o.x(MSG.java:592) at dm.jdbc.a.b.o.C(MSG.java:526) at dm.jdbc.a.b.o.B(MSG.java:507) at dm.jdbc.a.a.a(DBAccess.java:243) at dm.jdbc.a.a.a(DBAccess.java:715) at dm.jdbc.driver.DmdbPreparedStatement.prepareSql(DmdbPreparedStatement.java:303) at dm.jdbc.driver.DmdbPreparedStatement.allocateHandle(DmdbPreparedStatement.java:229) at dm.jdbc.driver.DmdbPreparedStatement.<init>(DmdbPreparedStatement.java:131) at dm.jdbc.driver.DmdbPreparedStatement.<init>(DmdbPreparedStatement.java:181) at dm.jdbc.driver.DmdbConnection.do_prepareStatement(DmdbConnection.java:748) at dm.jdbc.driver.DmdbConnection.do_prepareStatement(DmdbConnection.java:734) at dm.jdbc.driver.DmdbConnection.prepareStatement(DmdbConnection.java:1357) at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:55) at com.sun.proxy.$Proxy239.prepareStatement(Unknown Source) at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:86) at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:88) at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy238.prepare(Unknown Source) at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:87) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy237.update(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy237.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 21 common frames omitted 2025-05-19 19:49:46.266 [com.alibaba.nacos.client.Worker] INFO c.a.n.c.a.r.i.CredentialWatcher - null No credential found
05-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值