相关疑难解决方法(0)

SQLite中的Oracle INSTR替换

我目前正在将应用程序的一部分从Oracle移植到SQLite后端(Java,使用纯JDBC)。通常使用的一种Oracle特定功能是具有三个参数的INSTR函数:

INSTR(<字符串>,<搜索字符串>,<位置>)

此函数在字符串中搜索从某个位置开始的搜索字符串。第三个参数可以是正数或负数。如果为负,则搜索从字符串的末尾开始向后进行。

该功能在SQLite中不可用,而我能想到的最好的方法是通过嵌套其他一些功能来实现:

如果<position>为正:

LENGTH(<字符串>)-LENGTH(SUBSTR(SUBSTR(<字符串>,<位置>),STRPOS(SUBSTR(<字符串>,<位置>),<搜索字符串>)+ 1))

如果<position>为负(在我们的例子中,-1是唯一使用的负值):

LENGTH(<string>)-LENGTH(REPLACE(<string>,RTRIM(<string>,REPLACE(<string>,<search-string>,'')),''))

这似乎提供了预期的结果,但是您可以看到为什么我并不真正赞成这种方法。当然,因为在原始语法中,INSTR经常使用并且也被嵌套。此后成为维护的灾难。

是否有一种更优雅的方法,或者我可能缺少一些看似微不足道的任务的其他本机解决方案?

sql sqlite oracle

13
推荐指数
2
解决办法
137
查看次数

如何使用SQLite模拟LPAD/RPAD

我很好奇如何以最一般的方式正式模拟SQLite的RPAD和LPAD函数.目标是能够做到

LPAD(column, character, repeat)
RPAD(column, character, repeat)
Run Code Online (Sandbox Code Playgroud)

对于非固定表列column,character,repeat.如果character并且repeat是已知的常数,那么这将是一个好的,可行的解决方案:

但是如果上面的内容应该像这样执行呢:

SELECT LPAD(t.column, t.character, t.repeat) FROM t
SELECT LPAD(t.column, some_function(), some_other_function()) FROM t
SELECT LPAD(t.column, :some_bind_variable, :some_other_bind_variable) FROM t
Run Code Online (Sandbox Code Playgroud)

如何LPAD通常模拟此功能?我迷失了各种可能性:

一个相关的问题:

sql sqlite emulation padding

12
推荐指数
3
解决办法
9776
查看次数

通过JDBC中的JDBC实现数据库独立性

使用JDBC存在一些限制,数据库依赖性是其中一个限制.

是否有任何模式或方法可以在JDBC中实现数据库独立性(不使用任何其他ORM框架或工具).

我试图通过动态多态来实现这一点(根据特定的SQL语法为不同的DBMS创建特定的类并覆盖常见的CRUD操作).

例如,有没有办法编写通用SQL语句,以便它们几乎可以在每个SQL相关的DBMS中执行?

java sql jdbc

9
推荐指数
4
解决办法
1899
查看次数

标签 统计

sql ×3

sqlite ×2

emulation ×1

java ×1

jdbc ×1

oracle ×1

padding ×1