[]
        
在线Demo 免费试用
(Showing Draft Content)

附一 WynSql详解

1. 概述

1.1 功能概述

原生SQL查询是指某类型数据源能够接受的文本形式的查询语句,例如使用Oracle数据源时应使用符合Oracle查询语法的查询语句。如果您的数据源是Excel, Csv, Json, Xml, MongoDB, OData,由于这些数据源原生的查询语法标准和标准SQL语法相差较大,Wyn为您提供了WynSql语言进行查询。

2. WynSql

WynSql是为查询Excel, Csv, Json, Xml, MongoDB, OData数据源提供的SQL查询语言。

WynSql基本模拟了SQLite语法标准但有以下限制:

  1. 只能使用SELECT语句。并且可以添加Limit 子句限制返回的行数,例如select * from Demo_订单明细 limit 5。

  2. GroupBy子句中不能使用表达式,只能使用列引用。

  3. OrderBy子句中不能使用表达式,只能使用列引用。

  4. 不能使用任何SQLite的内置函数,Wyn提供了自己的函数库。

3. WynSql函数库

type=info

注意:

如果一个函数需要一个枚举值作为参数,请直接使用枚举值的字面值,不需要使用单/双引号。

例如StrLike(column1,'start%', Text)

  1. WynSql函数库使用参考下表:

    函数

    类型

    语法

    说明

    Abs

    数学

    Abs(number)

    获取指定数值(number)的绝对值.

    Acos

    数学

    Acos(number)

    获取余弦值为指定数值(number)的角度(以弧度为单位)。

    Asin

    数学

    Asin(number)

    获取正弦值为指定数值(number)的角度(以弧度为单位)。

    Atan

    数学

    Atan(number)

    获取切线为指定数值(number)的角度(以弧度为单位)。

    Atn2

    数学

    Atn2(y, x)

    获取其切线为指定数值(x和y)的商的角度(以弧度为单位)。

    Ceiling

    数学

    Ceiling(number)

    获取大于或等于指定数值(number)的最小整数。

    Cos

    数学

    Cos(number)

    获取指定角度的余弦值。

    Cot

    数学

    Cot(number)

    获取指定角度的三角余切值的角度(以弧度为单位)。

    Degrees

    数学

    Degrees(radians)

    获取以弧度指定的角度(radians)的角度(以度为单位)。

    Exp

    数学

    Exp(number)

    获取e的指定数值(number)的幂次方。

    Floor

    数学

    Floor(number)

    获取小于或等于指定十进制数(number)的最大整数。

    Log

    数学

    Log(number)

    获取(以e或指定数值newBase)为基数,指定数值(number)的自然对数。

    Log10

    数学

    Log10(number)

    获取以10为基数,指定数值(number)的自然对数。

    PI

    数学

    PI()

    获取表示圆的圆周与其直径的比率,由常数π指定。

    Power

    数学

    Power(x, y)

    获取指定数数值(x)的指定数值(y)的幂次方。

    Radians

    数学

    Radians(degrees)

    获取以度为指定数值表达式(degress)的数值(以弧度为单位)。

    Rand

    数学

    Rand()

    Rand(maxValue)

    获取指定范围内的随机整数, 或者获取一个大于等于0.0且小于1.0的随机浮点数。

    Round

    数学

    Round(number)

    Round(number, digits)

    获取将舍入为最接近的整数或指定的小数位数. 可用的MidpointRounding枚举值: ToEven, AwayFromZero。

    Sign

    数学

    Sign(number)

    获取一个数值符号(number)的整数。

    -1:值小于零。 0:值等于零。 1:值大于零。

    Sin

    数学

    Sin(number)

    获取指定角度(number)的正弦值。

    Sqrt

    数学

    Sqrt(number)

    获取指定数值(number)的平方根。

    Square

    数学

    Square(number)

    获取指定数值(number)的平方。

    Tan

    数学

    Tan(number)

    获取指定角度(number)的正切值。

    DateAdd

    日期时间

    DateAdd(EDatePart ddatepart, number, dateTime)

    获取将指定数值(number)作为有符号整数值添加到输入日期值(dateTime)的指定日期部分所产生的日期时间值。

    可用的EDatePart枚举值: Year, yyyy, yy, Quarter, qq, q, Month, mm, m, DayOfYear, dy, y Day, dd, d, WeekDay, dw, Week, ww, wk, Hour, hh, Minute, mi, n, Second, ss, s, MilliSecond, ms。

    DateDiff

    日期时间

    DateDiff(EDatePart datepart, dateTime1, dateTime2)

    获取指定日期(dateTime1)和(dateTime2)之间指定时间间隔(datepart)的数值(作为有符号整数值)。

    可用的EDatePart枚举值: Year, yyyy, yy, Quarter, qq, q, Month, mm, m, DayOfYear, dy, y Day, dd, d, WeekDay, dw, Week, ww, wk, Hour, hh, Minute, mi, n, Second, ss, s, MilliSecond, ms。

    DateFromParts

    日期时间

    DateFromParts(year, month, day)

    获取指定年(year),月(month)和日(day)的日期值。

    DatePart

    日期时间

    DatePart(EDatePart datepart, dateTime)

    获取指定日期(dateTime)的datepart的整数.。

    可用的EDatePart枚举值: Year, yyyy, yy, Quarter, qq, q, Month, mm, m, DayOfYear, dy, y Day, dd, d, WeekDay, dw, Week, ww, wk, Hour, hh, Minute, mi, n, Second, ss, s, MilliSecond, ms。

    EOMonth

    日期时间

    EOMonth(dateTime, [int addMonth = 0])

    获取包含具有可选偏移量的指定日期(dateTime)的月份的最后一天。

    GetDate

    日期时间

    GetDate()

    获取当前系统时间戳,作为没有时区偏移的日期时间值。

    GetUtcDate

    日期时间

    GetUTCDate()

    获取当前系统时间戳,作为UTC日期时间值而没有时区偏移量。

    Concat

    文本

    Concat([string1,string2...])

    获取给定字符串(string1,string2...)连接在一起生成的字符串。

    Format

    文本

    Format(value, format)

    获取用指定格式(format)将指定值(value)格式化生成的字符串。

    IndexOf

    文本

    IndexOf(value, search)

    获取从开头或指定位置(startIndex)开始,获取给定字符串(value)中子字符串(search)的位置。

    IsNull

    文本

    IsNull(value)

    检查给定值(value)是否为null或DBNull;或者,如果指定值(value1)为null或DBNull,则获取备用值(value2)。

    Left

    文本

    Left(value, length)

    获得从给定的字符串(value)中获取长度为(lengh)的子字符串(从左开始)。

    Len

    文本

    Len(value)

    获取给定字符串(value)的长度。

    Lower

    文本

    Lower(value)

    获取将给定字符串(value)中的所有字符转换为小写生成的字符串。

    LTrim

    文本

    LTrim(value)

    获取从给定字符串(value)中删除所有前导空格生成的字符串。

    Replace

    文本

    Replace(value, pattern, replacement)

    获取用字符(replacement)替换给定字符串(value)中的字符序列(pattern)生成的字符串。

    Replicate

    文本

    Replicate(value, times)

    获取重复给定的字符串(value)指定的次数(times)生成的字符串。

    Reverse

    文本

    REverse(value)

    获取反转给定字符串(value)生成的字符串。

    Right

    文本

    Right(value, length)

    获得从给定的字符串(value)中获取长度为(lengh)的子字符串(从右开始)。

    RTrim

    文本

    RTrim(value)

    获取从给定字符串(value)中删除所有尾随空格生成的字符串。

    SubString

    文本

    SubString(value, startIndex, length)

    获取给定字符串(value)中从指定数值(startIndex)开始,提取长度为指定数值(length)子字符串。

    ToString

    文本

    ToString(value)

    获取给定对象(value)的字符串。

    Trim

    文本

    Trim(value)

    获取从给定字符串(value)中删除所有前导和尾随空格生成的字符串。

    Upper

    文本

    Upper(value)

    获取将给定字符串(value)中的所有字符转换为大写字母生成的字符串。

    Array

    混合

    Array([object1,object2...])

    获取给定对象(object1,object2...)创建的数组。

    Category

    混合

    Category(value, RangeOption rangeOption, OutsideRangeOption outsideRangeOption, min, max, step)

    获取表示指定值所在范围的文本。

    可用的RangeOption枚举值:IncludeLeft_ExcludeRight, ExcludeLeft_IncludeRight。

    可用的OutsideRangeOption枚举值:None, LessThanMin, GreaterThanMax, All。

    CustomCategory

    混合

    CustomCategory(value, RangeOption rangeOption, [categoryDefinition1, categoryDefinition2...])

    获取一个文本,表示指定值所在的范围。可用的RangeOption枚举值:IncludeLeft_ExcludeRight, ExcludeLeft_IncludeRight。

    FiscalYear

    混合

    FiscalYear(dateTime, startMonthOfFiscalYear)

    获取指定日期(dateTime)的财政年度。

    Asc

    文本

    Asc(string)

    获取与字符对应的字符代码的Integer值。

    AscW

    文本

    AscW(string)

    获取与Unicode字符对应的字符代码的Integer值。

    Chr

    文本

    Chr(CharCode)

    获取与指定字符代码关联的字符。

    ChrW

    文本

    ChrW(CharCode)

    获取与指定字符代码关联的Unicode字符。

    Filter

    文本

    Filter([source1,source2...], Match, [bool Include = True], [CompareMethod Compare = Binary])

    获取基于零的数组,该数组包含基于指定过滤条件的string数组的子集。

    可用的CompareMethod枚举值: Binary, Text。

    FormatCurrency

    文本

    FormatCurrency(expression, [int NumDigitsAfterDecimal = -1], [TriState IncludeLeadingDigit = UseDefault], [TriState UseParensForNegativeNumbers = UseDefault], [TriState GroupDigits = UseDefault])

    使用系统控制面板中定义的货币符号,获取格式为货币值的表达式。

    可用的TriState枚举值:True, False, UseDefault。

    FormatDateTime

    文本

    FormatDateTime(expression, [DateFormat NamedFormat = GeneralDate])

    获取表示日期/时间值的字符串表达式。

    可用的DateFormat枚举值:GeneralDate, LongDate, ShortDate, LongTime, ShortTime。

    FormatNumber

    文本

    FormatNumber(expression, [int NumDigitsAfterDecimal = -1], [TriState IncludeLeadingDigit = UseDefault], [TriState UseParensForNegativeNumbers = UseDefault], [TriState GroupDigits = UseDefault])

    获取格式为数值的表达式。

    可用的TriState枚举值:True, False, UseDefault。

    FormatPercent

    文本

    FormatPercent(expression, numDigitsAfterDecimal = -1, TriState includeLeadingDigit = UseDefault, TriState useParensForNegativeNumbers = UseDefault, TriState groupDigits = TriState.UseDefault)

    获取格式为百分比(即乘以100)的表达式,其尾部为%字符。

    可用的TriState枚举值:True, False, UseDefault。

    GetChar

    文本

    GetChar(str, Index)

    获取表示所提供字符串(str)中指定索引(Index)的字符。

    InStr

    文本

    InStr(string1, string2, [CompareMethod Compare = Binary])

    获取给定字符串string2)在字符串(string1)中第一次出现的起始位置。

    可用的CompareMethod枚举值: Binary, Text。

    InStrRev

    文本

    InStrRev(stringCheck, stringMatch, [int start = -1], [CompareMethod compare = Binary])

    获取第一次出现的字符串(stringCheck)在字符串(stringMatch)中的位置(从字符串的右侧开始)。

    可用的CompareMethod枚举值:Binary, Text.

    Join

    文本

    Join([source1,source2...], [string delimiter = " "])

    获取通过连接数组中包含的多个子字符串(source1,source2...)创建的字符串。

    LCase

    文本

    LCase(value)

    获取将给定字符串(value)转换为小写的字符串或字符。

    LSet

    文本

    LSet(str, length)

    获取包含调整为指定长度(length)的字符串(str)左对齐的字符串。

    Mid

    文本

    Mid(str, start)

    获取包含指定字符串(str)中从指定数值(start)开始,获取指定数量(length)字符的字符串。

    RSet

    文本

    RSet(str, length)

    获取包含调整为指定长度(length)的字符串(str)的右对齐的字符串。

    Space

    文本

    Space(number)

    获取由指定数量(number)的空格组成的字符串。

    Split

    文本

    Split(str, [string delimiter = " "], [int limit = -1], [CompareMethod compare = Binary])

    获取包含指定数量子字符串的从零开始的一维数组。

    StrComp

    文本

    StrComp(string1, string2, [CompareMethod compare = Binary])

    获取根据字符串比较的结果,返回-1,0或1。

    StrDup

    文本

    StrDup(number, character)

    获取由指定字符(character)重复指定次数(number)组成的字符串或对象。

    StrReverse

    文本

    StrReverse(str)

    获得将给定字符串(str)的字符顺序颠倒过来生成的字符串。

    UCase

    文本

    UCase(str)

    获取将指定字符串(str)转换为大写的字符串或字符。

    StrLike

    文本

    StrLike(str, pattern, CompareMethod compareOption)

    比较参数(str)和(pattern)并返回与Like运算符相同的结果。

    可用的CompareMethod枚举值: Binary, Text。

    StrLikeText

    文本

    StrLikeText(str, Pattern)

    使用文本比较参数(str)和(pattern)并返回与Like运算符相同的结果。

    StrLikeBinary

    文本

    StrLikeBinary(str, Pattern)

    使用二进制比较参数(str)和(pattern)并返回与Like运算符相同的结果。

    DateSerial

    日期时间

    DateSerial(year, month, day)

    获取表示指定年(year)、月(month)和日(day)的日期值。

    DateString

    日期时间

    DateString()

    根据您的系统返回表示当前日期的字符串。

    DateValue

    日期时间

    DateValue(stringDate)

    获取包含字符串表示的日期信息的Date值,时间信息设置为凌晨(00:00:00)。

    Day

    日期时间

    Day(dateValue)

    获取1到31之间的Integer值,表示该月的某天。

    Hour

    日期时间

    Hour(timeValue)

    获取0到23之间的整数值,表示一天中的小时。

    Minute

    日期时间

    Minute(timeValue)

    获取0到59之间的整数值,表示小时的分钟。

    Month

    日期时间

    Month(dateValue)

    获取1到12之间的整数值,表示一年中的月份。

    MonthName

    日期时间

    MonthName(month, [bool abbreviate = false])

    获取包含指定月份month名称的字符串。

    Now

    日期时间

    Now()

    根据您的系统返回包含当前日期和时间的日期值。

    Second

    日期时间

    Second(timeValue)

    获取0到59之间的整数值,表示分钟的秒。

    TimeOfDay

    日期时间

    TimeOfDay()

    根据您的系统返回或设置包含当前时间的日期值。

    Timer

    日期时间

    Timer()

    获取自凌晨起经过的秒数。

    TimeSerial

    日期时间

    TimeSerial(hour, minute, second)

    获取表示指定小时,分钟和秒的Date值,其中日期信息设置为相对于1年的1月1日。

    TimeString

    日期时间

    TimeString()

    根据您的系统返回或设置表示当前时间的字符串。

    TimeValue

    日期时间

    TimeValue(stringTime)

    获取包含字符串表示的时间信息的Date值,日期信息设置为1年1月1日。

    Today

    日期时间

    Today()

    根据您的系统返回或设置包含当前日期的日期值。

    Weekday

    日期时间

    Weekday(dateValue, [FirstDayOfWeek dayOfWeek = Sunday])

    获取表示星期几的数值。

    可用的FirstDayOfWeek枚举值: System, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday.

    WeekdayName

    日期时间

    WeekdayName(weekday, [bool abbreviate = false], [FirstDayOfWeek firstDayOfWeekValue = System])

    获取包含指定工作日名称的字符串。

    可用的FirstDayOfWeek枚举值:System, Sunday, Monday,Tuesday, Wednesday, Thursday, Friday, Saturday.

    Year

    日期时间

    Year(dateValue)

    获取表示年份的1到9999之间的数值。

    CBool

    类型转换

    CBool(value)

    将给定值(value)转换为'bool'类型。

    CByte

    类型转换

    CByte(value)

    将给定值(value)转换为'byte'类型。

    CChar

    类型转换

    CChar(value)

    将给定值(value)转换为'char'类型。

    CDate

    类型转换

    CDate(value)

    将给定值(value)转换为'DateTime'类型。

    CDbl

    类型转换

    CDbl(value)

    将给定值(value)转换为'double'类型。

    CDec

    类型转换

    CDec(value)

    将给定值(value)转换为'decimal'类型。

    CInt

    类型转换

    CInt(value)

    将给定值(value)转换为'int'类型。

    CLng

    类型转换

    CLng(value)

    将给定值(value)转换为'long'类型。

    CShort

    类型转换

    CShort(value)

    将给定值(value)转换为'short'类型。

    CSng

    类型转换

    CSng(value)

    将给定值(value)转换为'float'类型。

    CStr

    类型转换

    CStr(value)

    将给定值(value)转换为'string'类型。

    Fix

    类型转换

    Fix(number)

    获取指定数值(number)的整数部分。

    Fix函数和Int函数的区别:Fix函数转换-8.4到-8,Int函数转换-8.4到-9。

    Hex

    类型转换

    Hex(number)

    获取指定数值(number)的十六进制值的字符串。

    Int

    类型转换

    Int(number)

    获取指定数值(number)的整数部分。

    Int和Fix之间的差异:Int将-8.4转换为-9,Fix将-8.4转换为-8。

    Oct

    类型转换

    Oct(number)

    获取指定数值(number)的八进制值的字符串。

    Str

    类型转换

    Str(number)

    获取指定数字(number)的字符串表示形式。始终为数字符号保留前导空格。

    Val

    类型转换

    Val(expression)

    获取字符串中包含的数字作为适当类型的数值。

    Rnd

    数学

    Rnd()

    获取Single类型的随机数。

    Choose

    流程

    Choose(Index, [choice1,choice2...])

    根据index的值从选择列表中返回一个值。

    如果index为1,则选择返回列表中的第一个选项;

    如果index为2,则返回第二个选择,依此类推。

    语法: Choose(index, choice-1 [, choice-2, ... [, choice-n ]] )

    IIF

    流程

    IIF(expression, TruePart, FalsePart)

    获取两个对象中的一个,如果表达式的计算结果为真,则选择返回(TruePart);否则返回(FalsePart)。

    Switch

    流程

    Switch([varExpr1,varExpr2...])

    计算表达式列表并返回与列表中第一个表达式相关联的值或表达式,该值为True。

    语法: Switch(expr-1, value-1 [ ,expr-2,value-2… [ ,expr-n,value-n ]] )

    Partition

    流程

    Partition(Number, Start, Stop, Interval)

    获取指示在计算的一系列范围内出现数字的位置。

    您可以创建一个选择查询,显示有多少订单落在各种范围内。

    例如,订单值从1到1000,1001到2000,依此类推。

    IsArray

    检测

    IsArray(exp)

    获取一个布尔值,指示变量(exp)是否为数组。

    IsDate

    检测

    IsDate(exp)

    获取一个布尔值,如果表达式是日期或可识别为有效日期或时间,则返回True;反之,则返回False。

    IsNothing

    检测

    IsNothing(exp)

    获取一个布尔值,指示表达式是否没有为其分配对象。

    IsNumeric

    检测

    IsNumeric(exp)

    获取一个布尔值,指示是否可以将表达式计算为数字。

    IsError

    检测

    IsError(exp)

    获取一个布尔值,指示是否可以将表达式计算为错误(exception)。

    IsDBNull

    检测

    IsDBNull(exp)

    获取一个布尔值,指示对象是空值还是DBNull。

    DDB

    财务

    DDB(Cost, Salvage, Life, Period, [double Factor = 2.0])

    获取使用双倍余额递减法或您指定的其他方法指定特定时间段内资产的折旧。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/ddb-function。

    FV

    财务

    FV(Rate, NPer, Pmt, [double PV = 0.0], [DueDate Due = EndOfPeriod])

    获取指定基于定期,固定付款和固定利率的年金的未来价值。

    可用的DueDate枚举值: EndOfPeriod, BegOfPeriod。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/fv-function。

    IPMT

    财务

    IPmt(Rate, Per, NPer, PV, [double FV = 0.0], [DueDate Due = EndOfPeriod])

    获取指定基于定期固定付款和固定利率的特定年金期间的利息支付。

    可用的DueDate枚举值: EndOfPeriod, BegOfPeriod。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/ipmt-function。

    NPER

    财务

    NPer(Rate, Pmt, PV, [double FV = 0.0], [DueDate Due = EndOfPeriod])

    获取指定基于定期,固定付款和固定利率的年金的期数。

    可用的DueDate枚举值::EndOfPeriod, BegOfPeriod。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/nper-function。

    PMT

    财务

    Pmt(Rate, NPer, PV, [double FV = 0.0], [DueDate Due = EndOfPeriod)]

    获取指定基于定期固定付款和固定利率的年金付款。

    可用的DueDate枚举值: EndOfPeriod, BegOfPeriod。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/pmt-function。

    PPMT

    财务

    PPmt(Rate, Per, NPer, PV, [double FV = 0.0], [DueDate Due = EndOfPeriod])

    获取指定基于定期固定付款和固定利率的特定年金期间的本金。

    可用的DueDate枚举值: EndOfPeriod, BegOfPeriod。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/ppmt-function。

    PV

    财务

    PV(Rate, NPer, Pmt, [double FV = 0.0], [DueDate Due = EndOfPeriod])

    获取指定基于将来要支付的定期固定付款和固定利率的年金现值。

    可用的DueDate枚举值:EndOfPeriod, BegOfPeriod。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/pv-function。

    RATE

    财务

    Rate(NPer, Pmt, PV, [double FV = 0.0], [DueDate Due = EndOfPeriod], [double Guess = 0.1])

    获取指定年金的每个期间的利率。

    可用的DueDate枚举值:EndOfPeriod, BegOfPeriod。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/rate-function。

    SLN

    财务

    SLN(Cost, Salvage, Life)

    获取指定单个期间资产的直线折旧。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/sln-function。

    SYD

    财务

    SYD(Cost, Salvage, Life, Period)

    获取指定指定期间内资产的年数总和折旧。

    查看详细信息 https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/syd-function。

4. 其他

4.1 Case...When

  1. 在 WynSql 语句中支持使用 Case...when 语法,用来判断条件列表并返回多个可能的结果之一。

    支持两种格式,以下分别进行说明并举例。

    格式一:通过将一个表达式与一组简单表达式进行比较来确定结果

    1)语法:

    CASE input_expression
         WHEN when_expression THEN result_expression [ ...n ]
         [ ELSE else_result_expression ]
    END

    2)示例:

    Case 类别名称
        WHEN '生鲜蔬果'  THEN '食品'
        WHEN '饮料烟酒'  THEN '食品'
        WHEN '食品副食'  THEN '食品'
        WHEN '日用百货'  THEN '百货'
        WHEN '文体办公'  THEN '百货'
        ELSE '其它'
        END as category

    格式二:通过对一组布尔表达式求值来确定结果

    1)语法:

    CASE
         WHEN Boolean_expression THEN result_expression [ ...n ]
         [ ELSE else_result_expression ]
    END

    2)示例:

    CASE 
        WHEN 产品单价<100 THEN 'Under 100'
        WHEN 产品单价>=100 AND 产品单价<1000 THEN 'Under 1000'
        ELSE 'Over 1000'
        END as 产品单价分组

    type=info

    注意: Case...when 语法中不支持嵌套子查询,使用时需留意。