我在sqlite db中有一个名为[tblbook]的表,其中有一列[authors].我在sql中尝试做的是将作者值拆分为firstname和lastname并在lastname上对其进行排序.我找到了这个很棒的代码:
SELECT substr(BookAuthor, 1, NULLIF(CHARINDEX(' ', BookAuthor) - 1, -1)) AS [FirstName],
substr(BookAuthor, CHARINDEX(' ', BookAuthor) + 1, LEN(BookAuthor)) AS [LastName]
FROM tblBook where _id=3
Run Code Online (Sandbox Code Playgroud)
它在MSSQL上运行完美,但sqlite没有charindex函数,因此失败了.
任何人都可以请善意,并告诉我什么应该是实现这一目标的最佳方法.
dem*_*lem 28
写这个的另一种方式(稍微短一点)就是
SELECT
substr(BookAuthor, 1, instr(BookAuthor, ' ') - 1) AS first_name,
substr(BookAuthor, instr(BookAuthor, ' ') + 1) AS last_name
FROM tblBook where id=3
ORDER BY last_name
Run Code Online (Sandbox Code Playgroud)
这适用于版本3.7.15及更高版本.
biz*_*lop 10
不幸的是,SQLite缺少此功能:
也许您可以使用http://www.sqlite.org/c3ref/create_function.html将自定义字符串位置函数提供给SQLite
但如果你确实需要它,那么有一个复杂,无效的解决方法:
http://sqlfiddle.com/#!7/e03a4/3
1:创建数字表/视图
2:将作者连接到数字表,并选择空间的MIN位置
3:现在您可以拆分名称
SELECT
substr( name, 1, pos-1) AS first_name,
substr( name, pos+1) AS last_name
FROM (
SELECT
author.name,
numbers.x AS pos
FROM author
INNER JOIN numbers
WHERE substr( author.name, numbers.x, 1) = ' '
GROUP BY author.name
) AS a
ORDER BY last_name;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22653 次 |
| 最近记录: |