加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite:格式化整数

发布时间:2020-12-12 18:53:59 所属栏目:百科 来源:网络整理
导读:是否可以格式化整数列以使逗号作为Sqlite中的千位数分隔符?我想查询结果如下. Id Name Price1 Product1 1,0002 Product2 2,500 解决方法 SQLite中没有内置数字格式化功能,但您可以创建一个 user-defined function来创建一个. 这是一个有效的例子.使用整数,
是否可以格式化整数列以使逗号作为Sqlite中的千位数分隔符?我想查询结果如下.

Id  Name      Price
1   Product1  1,000
2   Product2  2,500

解决方法

SQLite中没有内置数字格式化功能,但您可以创建一个 user-defined function来创建一个.

这是一个有效的例子.使用整数,需要调整浮点数.

#import <sqlite3.h>
static char *sepnum(int num,char *buf,size_t buflen,char sepch)
{
    int len = 0,negative = 0;
    if (!buf || buflen == 0) return buf;
    if (num < 0)
    {
        negative = 1;
        num = abs(num);
    }
    for (int i=1;;i++)
    {
        if (buflen>len+1) buf[len++] = '0' + (num % 10);
        num /= 10;
        if (num==0) break;
        if ((i % 3) == 0 && buflen>len+1) buf[len++] = sepch;
    }
    if (negative && buflen>len+1) buf[len++] = '-';
    for (int i=0;i<len/2;i++)
    {
        buf[len] = buf[i];
        buf[i] = buf[len-i-1];
        buf[len-i-1] = buf[len];
    }
    if (buflen>len) buf[len] = '';
    else buf[0] = '';
    return buf;
}
static void nformat(sqlite3_context *context,int argc,sqlite3_value **argv)
{
   if (argc == 1) 
    {
        int num = sqlite3_value_int(argv[0]);
        char buf[500] = "";
        if (sepnum(num,buf,sizeof(buf),','))
        {
            sqlite3_result_text(context,-1,SQLITE_TRANSIENT);
            return;
        }
   }
  sqlite3_result_null(context);
}

int main(int argc,char *argv[]) 
{
    sqlite3 *db;
    sqlite3_open(":memory:",&db);
    sqlite3_stmt *stmt;
    sqlite3_create_function(db,"nformat",1,SQLITE_UTF8,NULL,&nformat,NULL);
    sqlite3_prepare(db,"select nformat(1234)",&stmt,NULL);
    sqlite3_step(stmt);
    printf("[%s]n",sqlite3_column_text(stmt,0));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读