0
我有一个自定义函数需要返回一个逗号分隔的ID列表,然后我需要在语句中使用。然而,我似乎无法得到它的工作,因为sqlite3_result_text似乎不满意我用于单个字符串的单引号。下面是我有:sqlite传递逗号分隔字符串为sqlite3_result_text
void sqliteExtractNames(sqlite3_context *context, int argc, sqlite3_value **argv) {
assert(argc == 1);
if (sqlite3_value_type(argv[0]) == SQLITE_TEXT) {
unsigned const char *stringC = sqlite3_value_text(argv[0]);
NSString *stringOrig = [[NSString alloc] initWithUTF8String:(char *) stringC];
// This returns something like: 'Name 1', 'Name 2'
NSString *nameString = [self getCommaSeparatedNames: stringOrig];
if ([nameString length] > 0) {
sqlite3_result_text(context, [nameString UTF8String], -1, SQLITE_TRANSIENT);
} else {
sqlite3_result_null(context);
}
} else {
sqlite3_result_null(context);
}
}
再后来我做:
SELECT count(*) FROM mytable WHERE name IN (sqliteExtractNames(somecolumn))
然而,这似乎并没有工作。如果我将getCommaSeparatedNames
方法更改为不带单引号的单个单词,它就会起作用。当我用逗号分隔多个单词时,它停止工作。我怎样才能传递一个文本结果,可以在这个声明中使用?
谢谢 - 是的,我意识到它在整个字符串周围放了一个单引号。有没有办法让sqlite没有操作返回一个字符串'原样'?我尝试使用sqlite3_result_blob无济于事。表值函数确实看起来非常复杂以满足我的需求。 – strangetimes
“正常”函数返回单个值。 –