sqlite自定义函数的定义及使用

1,sqlite 没有 ToUpper 的自带函数。 没关系,我们可以创建它;

2,sqlite 不能直接创建自定义函数,不能像 sql server中那样方便创建并使用。没关系,我们照样可以创建它,创建成功后,我们照样可以随心所欲(比如 批量更新等)

效果:

 var ss = JonseTest.SqlLiteHelper.GetSingle(out sError, "select ToUpper('ABCcdsf')");   // ABCCDSF

\

方案:

step1: 创建类 ToUpper   和 GetChinesePYChar

[csharp]
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.SQLite; 
 
namespace MetroGuide 

    [SQLiteFunction(Name = "ToUpper", Arguments = 1, FuncType = FunctionType.Scalar)] 
    public class ToUpper : SQLiteFunction 
    { 
        public override object Invoke(object[] args) 
        { 
            return args[0].ToString().ToUpper(); 
        } 
    } 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;

namespace MetroGuide
{
    [SQLiteFunction(Name = "ToUpper", Arguments = 1, FuncType = FunctionType.Scalar)]
    public class ToUpper : SQLiteFunction
    {
        public override object Invoke(object[] args)
        {
            return args[0].ToString().ToUpper();
        }
    }
}

step2:

            var ss = JonseTest.SqlLiteHelper.GetSingle(out sError, "select ToUpper('ABCcdsf')");   // ABCCDSF

结束。

 

实际使用

namespace TransportationManagement
{
[SQLiteFunction(Name = "fnGetRDotString", Arguments = 1, FuncType = FunctionType.Scalar)]
public class fnGetRDotString : SQLiteFunction
{
public override object Invoke(object[] args)
{
string param= args[0].ToString();
if( param.Length>0 && param.LastIndexOf(",") == param.Length - 1){
//param.TrimEnd(',');
param = param.Substring(0, param.LastIndexOf(","));
}
return param;
}

}
}

 

sqlStr.Append("select * from (select ID,tasktype,");
sqlStr.Append(@" (
fnGetRDotString( (case transportw when '' then '' else transportw||',' end)||
(case transportchaoxian when '' then '' else transportchaoxian||',' end)||
(case transportjinliu when '' then '' else transportjinliu||',' end)||
(case transportshangshui when '' then '' else transportshangshui||',' end)||
transportconditions)
) as transportconditions,");

原文地址:http://www.2cto.com/kf/201305/210966.html

posted @ 2016-08-30 11:37  花影疏帘  阅读(2866)  评论(0)    收藏  举报