EXCEL2003 OLEDB查询下的SQL函数整理(whsfhwm)
- 格式:doc
- 大小:311.00 KB
- 文档页数:28
⽤sql直接操作excel表--配置权限EXEC sp_configure 'show advanced options', 1;GORECONFIGURE;GOEXEC sp_configure 'Ad Hoc Distributed Queries', 1;GORECONFIGURE;GOSQL SERVER 和EXCEL的数据导⼊导出1、在SQL SERVER⾥查询Excel数据:-- ======================================================2003版本SELECT*FROMOpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]下⾯是个查询的⽰例,它通过⽤于 Jet 的 OLE DB 提供程序查询 Excel 电⼦表格。
SELECT*FROMOpenDataSource ( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions-------------------------------------------------------------------------------------------------2007版本SELECT*FROMOpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source="c:\book1.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet1$]2007和2003都可⽤SELECT*FROMOpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source="D:\test1.xls";User ID=Admin;Password=;Extended properties="Excel 12.0 Xml;HDR=YES;IMEX=1";')...[Sheet1$]2、将Excel的数据导⼊SQL server :-- ======================================================SELECT*into newtableFROMOpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]实例:SELECT*into newtableFROMOpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions-------------------------------------------------------------------------------------------------3、将SQL SERVER中查询到的数据导成⼀个Excel⽂件-- ======================================================T-SQL代码:EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'参数:S 是SQL服务器名;U是⽤户;P是密码说明:还可以导出⽂本⽂件等多种格式实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'在VB6中应⽤ADO导出EXCEL⽂件代码:Dim cn As New ADODB.Connectioncn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'" ------------------------------------------------------------------------------------------------4、在SQL SERVER⾥往Excel插⼊数据:-- ======================================================insertintoOpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)T-SQL代码:INSERTINTOOPENDATASOURCE('Microsoft.JET.OLEDB.4.0','Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$](bestand, produkt) VALUES (20, 'Test')。
excel中sql应用实例-回复Excel中SQL应用实例在Excel中,可以应用SQL(Structured Query Language)来进行数据分析和处理,这为用户提供了更多的灵活性和强大的功能。
本文将介绍一些常见的Excel中SQL的应用实例,并一步一步回答相关问题。
1. 如何在Excel中写入SQL查询?在Excel中使用SQL查询,需要先打开Excel并打开工作表。
然后,选择“数据”标签,并点击“来自其他源”下的“从数据库”。
在弹出的对话框中,选择“SQL Server ODBC 驱动程序”,并点击“下一步”。
在接下来的对话框中,输入SQL Server的服务器名称和数据库名称。
如果需要,可以选择特定的表格或视图。
点击“下一步”后,需要输入用户名和密码来连接到数据库。
最后,点击“完成”来完成连接。
2. 如何在Excel中进行基本的数据筛选和排序?在Excel中,可以使用SQL来进行基本的数据筛选和排序。
首先,选择要筛选和排序的数据区域。
然后,在Excel的“数据”标签中,点击“排序和筛选”。
在弹出的菜单中,选择“自定义排序”来按照自定义条件对数据进行排序。
在“排序”对话框中,可以根据需要选择排序字段和排序方式。
点击“确定”后,数据将按照指定的条件进行排序。
要进行数据筛选,可以选择“筛选”选项,并根据需要选择筛选条件。
点击“确定”后,Excel将只显示符合筛选条件的数据。
3. 如何在Excel中进行数据聚合和汇总?在Excel中,可以使用SQL来进行数据聚合和汇总。
首先,选择要聚合和汇总的数据区域。
在Excel的“数据”标签中,选择“透视表”选项。
在弹出的对话框中,选择要使用的数据区域,并将其拖动到透视表的“区域”区域中。
然后,在透视表的“字段列表”中,选择要聚合和汇总的字段。
在透视表的“值”区域中,选择要应用的聚合函数(如计数、求和、平均值等)。
点击“确定”后,Excel将根据指定的字段和聚合函数,生成一个透视表来汇总和显示数据。
Excel中使用SQL查询语句,让你的数据分析如虎添翼作者:Excel高手。
在我们进行数据处理的过程中,我们常常会调用一些外部数据,此时使用SQL查询语句是非常方便的,今天我们就来给大家详细讲解一下SQL查询语句中用得最多的SELECT语句的一些基本用法。
1.SELECT 语法SELECT [ALL|DISTINCT|DISTINCTROW|TOP]{|talbe.|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]} FROM table_source[ WHERE search_condition ][ GROUP BY group_by_expression ][ HAVING search_condition ][ ORDER BY order_expression [ ASC | DESC ] ][LIMIT [offset,] rows | rows OFFSET offset]DISTINCT 去除重复值DISTINCTROW忽略基于整个重复记录的数据,而不仅仅是重复字段。
执行步骤:1.先从from字句一个表或多个表创建工作表2.将where条件应用于1)的工作表,保留满足条件的行3.GroupBy 将2)的结果分成多个组4.Having 将条件应用于3)组合的条件过滤,只保留符合要求的组。
5.Order By对结果进行排序。
6. LIMIT限制查询的条数2.FROM子句FROM子句是SELECT语句中必须要有的一部分,它指定了查询所需要的数据源的名称。
语法:FROM table_source。
参数解释:table_source可以是表、视图等等,一个语句中最多可以使用256个表源。
如果使用的表过多,查询性能是会受到影响的,所以不建议使用太多表源。
请看下面的示例:Select distinct 供货商信息.单位名称,供货商信息.地址from 供货商信息3.WHERE子句在查询数据的时候,我们常常是希望查询出满足一定条件的数据,而非数据表中的所有数据,这个时候我们就可以使用WHERE子句来实现。
excel 里sql语句用法-回复标题:Excel中SQL语句的用法及步骤解析导言:在Excel中,我们可以使用SQL(Structured Query Language)语句来访问和处理数据。
SQL语句可以帮助我们以一种更灵活、高效的方式从数据源中提取、过滤和操作数据。
本文将详细介绍Excel中SQL语句的用法,并逐步解析其实现方式,以帮助读者更好地利用SQL语句处理Excel数据。
第一部分:SQL语句简介及Excel中的使用1. SQL语句简介:SQL是一种通用且广泛应用的查询语言,用于管理和操作关系型数据库。
它是一种基于结构化的查询语言,可以实现对数据的增删改查等操作。
在Excel中,我们可以使用SQL查询数据并进行数据分析。
2. Excel中使用SQL语句:从Excel 2013版本开始,Excel内置了"Power Query"和"Power Pivot"两个功能,其中包含了SQL语句的使用。
Power Query允许用户从不同来源导入数据,Power Pivot提供了一种数据建模工具,可以通过SQL语句进行数据操作。
在Excel中使用SQL语句,主要有以下几个步骤:a) 导入数据源:在Excel中,选择"数据"选项卡,点击"获取外部数据",选择适当的数据源,并设置相关参数,如数据库连接字符串、用户名和密码等。
b) 进入Power Query编辑器:在"数据"选项卡中,点击"从其他数据源",选择"从数据库"。
在弹出的"从数据库"对话框中,选择适当的数据库类型,并输入连接信息,点击"确定"。
c) 编写SQL查询语句:在Power Query编辑器中,点击"编辑"按钮,进入查询编辑界面。
在"转换"选项卡中,点击"高级编辑",即可输入SQL 查询语句。
Excel工作表之SQL查询方法近期在单位上做业务数据分析,发现还是Excel用的直接,筛选、求和、分类等等也是不亦乐乎,但是发现一些函数的效率与SQL还是有着较大差距,甚至是天壤之别,故作文一篇,提供Excel中的SQL 查询使用方式。
查询的工作表可以是当前工作簿中的,也可以是其他工作簿中的。
例如,图1所示的“网站数据.xlsx”工作簿中,Sheet1表格存储的是网站访问信息统计,现在需要从Sheet1中获取浏览次数大于500的城市。
图1 Sheet1中存储的访问数据可以在当前工作簿的其他表格中运行SQL查询,也可以新建一个工作簿,在本示例中选择当前工作簿的Sheet2表格,然后单击“获取外部数据”模块的“现有连接”按钮,在打开的“现有连接”对话框中单击“浏览更多”按钮,在打开的“选取数据源”对话框中定位到存储源数据的Excel工作簿文件─网站数据.xlsx,如图2所示。
图2 定位存储源数据的工作簿文件单击“打开”按钮,打开如图3所示的“选择表格”对话框,勾选“数据首行包含列标题”复选框,选择Sheet1工作表。
单击“确定”按钮,将打开如图4所示的“导入数据”对话框,在“请选择该数据在工作簿中的显示方式”选项中选择“表”,“数据的放置位置”选择“现有工作表”并指定位置为A1单元格。
图3 “选择表格”对话框图4 “导入数据”对话框单击“属性”按钮将打开如图5所示的“连接属性”对话框,在“命令类型”下拉列表中选择“SQL”,在命令文本中输入SQL查询语句“SELECT * FROM [Sheet1$] WHERE 浏览次数>500”,其中“Sheet1”即指定的Sheet1工作表,当在SQL中引用Excel工作表时,需要在名称后面加上“$”符并将其包含在方括号内,“*”表示取出工作表中的全部字段,WHERE子句用于指定筛选条件,即浏览次数大于500。
图5 “连接属性”对话框单击“确定”按钮返回到“导入数据”对话框,再次单击“确定”按钮即可看到查询结果,如图6所示。
目录一、前言 (3)1.背景简介 (3)2.适用范围: (4)3.技巧介绍 (4)4.SQL函数分类 (5)二、聚合函数 (6)1.Sum 函数 (6)2.Count 函数 (8)3.Avg 函数 (9)4.Min 和 Max 函数 (10)5.First 和 Last 函数 (11)6.StDev 和 StDevP 函数 (12)7.Var 和 VarP 函数 (12)三、字符串相关函数 (13)(一) 字符串查找函数 (13)1.Instr函数 (13)2.InStrB 函数 (15)(二) 字符串转换函数 (15)1.CBool(expression) (15)2.CByte(expression) (15)ur(expression) (15)4.CDate(expression) (15)5.CDbl(expression) (15)6.CDec(expression) (15)7.CInt(expression) (15)8.CLng(expression) (15)9.CSng(expression) (15)10.CStr(expression) (15)11.CVar(expression) (15)12.Val(string) (15)13.Str(number) (16)(三) 字符串处理函数 (17)1.Trim(string) (17)2.Ltrim(string) (17)3.Rtrim(string) (17)4.Len(string) (17)5.Left(string, x) (17)6.Right(string, x) (17)7.Mid(string, start,x) (17)8.Ucase(string) (17)9.Lcase(string) (17)10.Space(x) (18)11.Asc(string) (18)12.AscB(string) (18)13.AscW(string) (18)14.Chr(charcode) (18)15.ChrW(charcode as long) (18)16.String(number,string) (18)17.LeftB(String, Length As Long) (18)18.RightB(String, Length As Long) (18)19.MidB(String, Start As Long, [Length]) (18)20.LenB(Expression) (19)21.Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) (19)22.StrComp(string1, string2[, compare]) (20)23.StrConv(string, conversion, LCID) (21)四、数学函数 (22)1.Sin(X)、Cos(X)、Tan(X)、Atan(x) (22)2.Log(x) (22)3. Exp(x) (22)4.Abs(x) 返回绝对值。
DAVERAGE返回列表或数据库中满足指定条件的列中数值的平均值。
语法DAVERAGE(database,field,criteria)Database 构成列表或数据库的单元格区域。
数据库是包含一组相关数据的列表,其中包含相关信息的行为记录,而包含数据的列为字段。
列表的第一行包含着每一列的标志项。
Field 指定函数所使用的数据列。
列表中的数据列必须在第一行具有标志项。
Field 可以是文本,即两端带引号的标志项,如“使用年数”或“产量”;此外,Field 也可以是代表列表中数据列位置的数字:1 表示第一列,2 表示第二列,等等。
Criteria 为一组包含给定条件的单元格区域。
可以为参数 criteria 指定任意区域,只要它至少包含一个列标志和列标志下方用于设定条件的单元格。
示例1 2 3 4 5 6 7 8 9 10A B C D E F树种高度使用年数产量利润高度苹果树>10 <16 梨树树种高度使用年数产量利润苹果树18 20 14 105.00梨树12 12 10 96.00樱桃树13 14 9 105.00苹果树14 15 10 75.00梨树9 8 8 76.80苹果树8 9 6 45.00 公式说明(结果)=DCOUNT(A4:E10,"使用年数",A1:F2) 此函数查找高度在 10 到 16 英尺之间的苹果树的记录,并且计算这些记录中“使用年数”字段包含数字的单元格数目。
(1)=DCOUNTA(A4:E10,"利润",A1:F2) 此函数查找高度为 10 到 16 英尺之间的苹果树记录,并计算这些记录中“利润”字段为非空的单元格数目。
(1)=DMAX(A4:E10,"利润",A1:A3) 此函数查找苹果树和梨树的最大利润。
(105)=DMIN(A4:E10,"利润",A1:B2) 此函数查找高度在 10 英尺以上的苹果树的最小利润。
EXCELVBA的SQL查询EXCEL VBA 的SQL查询知识就是这样,几天不学,很快会忘记。
3年没有玩这个了。
不得不重学。
' 用excel SQL方法'conn是建立的连接对象,用open打开' 通过CreateObject("ADODB.Connection") 这一句建立了一个数据库连接对象conn' 在工程中就不再需要引用“Microsot ActiveX Data Objects 2.0 Library“ 对象'设置对象 conn 为一个新的 ADO 链接实例,也可以用 set conn = New ADODB.Connection。
--------------' conn.Close表示关闭conn连接' Set conn = Nothing 是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls"能把这段含义具体解释一下吗?'这里的dbq的作用?'------------------'dsn是缩写,data source name数据库名是 excel file'dbq 也是缩写,data base query 意思是数据库查询,后接源库文件名 001.xls'---------------------'代码中长单词怎么记住的?'比如copyfromrecordset可以拆开记忆,copy、from、recordset 这三个单词意思知道吧,就是“复制、从、记录集”'-----------------'Sql = "select sum(分数) from [sheet1$]"这里加"分数"两字什么作用?'SQL一般结构是select 字段 from 表,意思是从指定的表中查询字段,字段的理解可以是:表中的列名''分数是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据'-------------------'为什么要用复制的对象引用过来计算呢?'因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总表来,所以需要复制copy'注意这里的 [sheet1$]" ,001文件的数据存放地上sheet1表,应当用方括号并加上$''如果源数据文件001不是excel,而是Access,则引用表时,不需要加方括号,也不要$'-------------------------------还有,这里Execute表示什么作用?'' Execute是执行SQL查询语句的意思-----------------------------如果不要字段也可以,那么在打开语句中加上:hdr=no'这样没有分数字段也可实现'SQL语句我换了形式,而且加上了hdr=no,即无需字段,而且我在SQL中用了sum(f1),f1表示第一列数据'[sheet1$a1:a10] "是只求a1:a10区域的和"选择供应商和选择月份记录的查询Private Sub CommandButton1_Click()Range("a5:k1000").ClearContentsSet conn = CreateObject("ADODB.Connection")conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;imex=1';data source=" &ThisWorkbook.FullNameIf Range("b3") = "全部" And Range("d3") = "全部" ThenSql = "select * from [数据源$a3:i1000] "GoTo 100End IfIf Range("b3") = "全部" ThenSql = "select * from [数据源$a3:i1000] where month(日期) = '" & [d3] & "'"GoTo 100End IfIf Range("d3") = "全部" ThenSql = "select * from [数据源$a3:i1000] where 供应商= '" & [b3] & "'"GoTo 100End IfIf Range("d3") <> "全部" And Range("d3") <> "全部" Theni = Range("d3")Sql = "select * from [数据源$a3:i1000] where (供应商= '" & [b3] & "') and (month(日期) = '" & i & "')"GoTo 100End If100:Sheets("统计").Range("a5").CopyFromRecordset conn.Execute(Sql)conn.Close: Set conn = NothingEnd Sub-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-二)查询某地的收款记录工作表的收款日期,凭证号,金额,摘要和送货记录工作表的发货日期,单号,金额,折扣,赠送,退货,备注Private Sub CommandButton1_Click()Range("a6:k16").ClearContentsSet conn = CreateObject("ADODB.Connection")conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;imex=1';data source=" & ThisWorkbook.FullNameSql1 = "select 收款日期,凭证号,金额,摘要from [收款记录$B2:F20] where 客户名称 = '" & [b2] & "'"Sql2 = "select 发货日期,单号,金额,折扣,赠送,退货,备注 from [送货记录$B2:i20] where 客户名称 = '" & [b2] & "'"Sheets("套打").Range("a6").CopyFromRecordset conn.Execute(Sql1)Sheets("套打").Range("e6").CopyFromRecordset conn.Execute(Sql2)conn.Close: Set conn = NothingEnd Sub用VBA将SQL查询结果送到EXCEL指定单元格Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表Dim cn As New ADODB.Connection '定义数据链接对象,保存连接数据库信息;请先添加ADO引用Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表Dim strCn As String, strSQL As String '字符串变量strCn = "Provider=sqloledb;Server=(local);Database=tywk;Uid=sa;Pwd=wkserver9;" '定义数据库链接字符串cn.Open strCnFINALROW = Cells(65535, 1).End(xlUp).RowSet sht = ThisWorkbook.Worksheets("更新数据库")For i = 2 To FINALROW '循环开始strSQL = "insert into tywk.dbo.表名 values('" & sht.Cells(i, 1) _& "' ,'" & sht.Cells(i, 2) & "' ,'" & sht.Cells(i, 3) & "' ,'" & sht.Cells(i, 4) _& "' ,'" & sht.Cells(i, 5) & "' ,'" & sht.Cells(i, 6) & "' ,'" & sht.Cells(i, 7) _& "' ,'" & sht.Cells(i, 8) & "' ,'" & sht.Cells(i, 9) & "' ,'" & sht.Cells(i, 10) _& "' ,'" & sht.Cells(i, 11) & "' ,'" & sht.Cells(i, 12) & "' ,'" & sht.Cells(i, 13) _& "' ,'" & sht.Cells(i, 14) & "' ,'" & sht.Cells(i, 15) & "' ,'" & sht.Cells(i, 16) _& "' ,'" & sht.Cells(i, 17) & "' ,'" & sht.Cells(i, 18) & "');"cn.Execute strSQLNextMsgBox "保存成功"cn.Close。
excel中使用sql语句在 Excel 中,您可以使用 SQL 语句来查询和分析数据。
Excel 支持使用 SQL 语句对数据进行筛选、排序和聚合操作。
下面是一些常用的 SQL 语句在 Excel 中的应用示例:1. 查询表格中的数据:```.SELECT * FROM [Sheet1$]```.这个语句会查询名为 "Sheet1" 的工作表中的全部数据。
2. 条件筛选:```.SELECT * FROM [Sheet1$] WHERE 列名 = 值。
```.这个语句会查询满足条件的行,其中 "列名" 是要筛选的列名,"值" 是要匹配的值。
3. 排序:```.SELECT * FROM [Sheet1$] ORDER BY 列名 ASC/DESC.```.这个语句会按照指定列的升序(ASC)或降序(DESC)对数据进行排序。
4. 聚合操作:```.SELECT 列名, 聚合函数(列名) FROM [Sheet1$] GROUP BY 列名。
```.这个语句会对指定列进行分组,并应用聚合函数(如SUM、COUNT、AVG、MAX、MIN 等)进行统计计算。
请注意,上述示例中的 "[Sheet1$]" 是指查询的目标工作表名,您可以根据需要修改为您实际的工作表名。
要在 Excel 中使用 SQL 语句,您需要打开 Excel 内建的 "数据" 标签,然后选择 "从其他数据源" 或 "从文本",根据您的数据来源选择合适的选项,进入查询编辑器。
在编辑器中,您可以输入上述 SQL 语句并执行查询,然后将结果显示在 Excel 中,或将查询结果导入到新的工作表或数据透视表中。
希望以上信息对您有帮助!如果您有进一步的问题,请随时提问。
excel 函数大全2009年08月29日星期六 09:46数据库和清单管理函数DAVERAGE 返回选定数据库项的平均值DCOUNT 计算数据库中包含数字的单元格的个数DCOUNTA 计算数据库中非空单元格的个数DGET 从数据库中提取满足指定条件的单个记录DMAX 返回选定数据库项中的最大值DMIN 返回选定数据库项中的最小值DPRODUCT 乘以特定字段(此字段中的记录为数据库中满足指定条件的记录)中的值DSTDEV 根据数据库中选定项的示例估算标准偏差DSTDEVP 根据数据库中选定项的样本总体计算标准偏差DSUM 对数据库中满足条件的记录的字段列中的数字求和DVAR 根据数据库中选定项的示例估算方差DVARP 根据数据库中选定项的样本总体计算方差GETPIVOTDATA 返回存储在数据透视表中的数据日期和时间函数DATE 返回特定时间的系列数DATEDIF 计算两个日期之间的年、月、日数DATEVALUE 将文本格式的日期转换为系列数DAY 将系列数转换为月份中的日DAYS360 按每年 360 天计算两个日期之间的天数EDATE 返回在开始日期之前或之后指定月数的某个日期的系列数EOMONTH 返回指定月份数之前或之后某月的最后一天的系列数HOUR 将系列数转换为小时MINUTE 将系列数转换为分钟MONTH 将系列数转换为月NETWORKDAYS 返回两个日期之间的完整工作日数NOW 返回当前日期和时间的系列数SECOND 将系列数转换为秒TIME 返回特定时间的系列数TIMEVALUE 将文本格式的时间转换为系列数TODAY 返回当天日期的系列数WEEKDAY 将系列数转换为星期WORKDAY 返回指定工作日数之前或之后某日期的系列数YEAR 将系列数转换为年YEARFRAC 返回代表 start_date(开始日期)和 end_date(结束日期)之间天数的以年为单位的分数DDE 和外部函数CALL 调用动态链接库(DLL)或代码源中的过程REGISTER.ID 返回已注册的指定 DLL 或代码源的注册 IDSQL.REQUEST 连接外部数据源,并从工作表中运行查询,然后将结果作为数组返回,而无需进行宏编程。
目录一、前言 (3)1.背景简介 (3)2.适用范围: (4)3.技巧介绍 (4)4.SQL函数分类 (5)二、聚合函数 (6)1.Sum 函数 (6)2.Count 函数 (8)3.Avg 函数 (9)4.Min 和 Max 函数 (10)5.First 和 Last 函数 (11)6.StDev 和 StDevP 函数 (12)7.Var 和 VarP 函数 (12)三、字符串相关函数 (13)(一) 字符串查找函数 (13)1.Instr函数 (13)2.InStrB 函数 (15)(二) 字符串转换函数 (15)1.CBool(expression) (15)2.CByte(expression) (15)ur(expression) (15)4.CDate(expression) (15)5.CDbl(expression) (15)6.CDec(expression) (15)7.CInt(expression) (15)8.CLng(expression) (15)9.CSng(expression) (15)10.CStr(expression) (15)11.CVar(expression) (15)12.Val(string) (15)13.Str(number) (16)(三) 字符串处理函数 (17)1.Trim(string) (17)2.Ltrim(string) (17)3.Rtrim(string) (17)4.Len(string) (17)5.Left(string, x) (17)6.Right(string, x) (17)7.Mid(string, start,x) (17)8.Ucase(string) (17)9.Lcase(string) (17)10.Space(x) (18)11.Asc(string) (18)12.AscB(string) (18)13.AscW(string) (18)14.Chr(charcode) (18)15.ChrW(charcode as long) (18)16.String(number,string) (18)17.LeftB(String, Length As Long) (18)18.RightB(String, Length As Long) (18)19.MidB(String, Start As Long, [Length]) (18)20.LenB(Expression) (19)21.Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) (19)22.StrComp(string1, string2[, compare]) (20)23.StrConv(string, conversion, LCID) (21)四、数学函数 (22)1.Sin(X)、Cos(X)、Tan(X)、Atan(x) (22)2.Log(x) (22)3. Exp(x) (22)4.Abs(x) 返回绝对值。
(22)5.Int(number)、Fix(number) (22)6.Sgn(number) (22)7.Sqr(number) (22)8.VarType(varname) (22)9.Rnd(x) (22)10.ROUND(c,decimals) (22)五、测试函数 (22)1.IsNumeric(x) (22)2.IsDate(x) (23)3.IsEmpty(x) (23)4.IsError(expression) (23)5.IsNull(expression) (23)6.IsObject(identifier) (23)六、日期时间函数 (23)1.日期加减:DateAdd函数 (23)2.计算两个日期的差DateDiff函数: (24)3.提取日期中的部分内容DatePart函数: (24)4.用独立的部件生成日期DateSerial函数: (25)5.用字符串表达式生成日期:DateValue(stringexpression) (26)6.Now() (26)7.Date() (26)8.Time() (26)9.Timer() (26)10.TimeSerial(hour, minute, second) (26)11.DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) (26)12.Second(time) (26)13.Minute(time) (27)14.Hour(time) (27)15.Day(date) (27)16.Month(date) (27)17.Year(date) (27)18.Weekday(date, [firstdayofweek]) (27)七、流程控制函数 (27)1.Iif()和Switch() (27)八、结束语 (28)一、前言1.背景简介一直想对EXCEL 2003中SQL语句里的可用函数进行专门的归纳整理,今天终于与大家见面了。
虽然目前EXCEL 2007/2010使用者越来越多,但无疑EXCEL 2003依然有着大量的使用人群,所以我才觉得很有必要对此进行整理,方便SQL初学者,希望他们能够少走一些弯路,节约一点时间来学习更多的精彩内容。
相信对于使用高版本的朋友来说,本文也是有一定的借鉴作用的。
构成本文的内容,有相当部分是来自于EH培训中心SQL初级培训班的培训过程,有引自EH技术论坛的内容,也有来自微软提供的帮助文档,当然还有本人自己钻研的一点点心得体会,所以这里主要是一种归纳整理。
由于本人水平所限,学习SQL时间也不长,所以有许多地方理解还比较肤浅,也难免有所疏漏或谬误,欢迎大家批评指正,或给与补充。
本文中,如果没有特别说明,则所提到的SQL函数都是已经经过本人在EXCEL2003中OLE DB环境下测试并通过的;文中提到的示例语句一般使用蓝色字体,由于示例太多的话,将会让EXCEL文件过于庞大,故只在EXCEL文件“EXCEL-OLE DB之SQL函数示例(whsfhwm整理).xls”里提供了一部分实例,方便大家进行测试,文中出现的示例,而上述EXCEL文件中又没有的,完全可以自己做测试。
另外,由于SQL语句的语法对于大小写不敏感,所以本文中并没有对SQL语句的书写进行严格规范,这一点请大家多多包涵。
2.适用环境:本文介绍的内容适用的环境为:EXCEL 2003 OLE-DB环境下的SQL查询。
本文内容重点在于介绍SQL函数,而非SQL语句。
3.技巧介绍介绍SQL函数之前,先介绍一下本人在测试SQL语句中的几个小技巧:●编辑技巧:(虽然不是本人首创,但接触SQL多了,自然而然就需要这样做了)使用记事本或其他类似小巧的编辑工具来编辑SQL语句。
通常,你会感觉到编辑查询对话框中进行编辑SQL语句实在是不方便,因此推荐在记事本中进行编辑,好处有两点:一是可以方便的将数据源的标题行复制过来,然后用替换的方法将字段名称之间转化为“,”,这个是SQL 语句语法的要求,这样复制过来的字段名称还可以避免自己录入出错的可能性;二是可以防止在所书写SQL语句有错误的情况下丢失刚才的语句,起到临时书写备份的作用,便于自己对错误语句的检查。
●首次创建查询表技巧:第一次创建导入外部数据的查询表时,不得不通过菜单-导入外部数据-导入数据-选择数据源文件-出现“编辑OLE DB 查询”对话框时,此时一般就不要匆忙将自己书写的SQL查询语句录入到命令文本中,而是采用默认的方式生成查询表,这样做的好处就是避免自己所写的SQL语句有误,不产生任何结果,然后下一次操作又要重复上面的步骤,效率显然较低;所以建议采用默认方式,然后再通过右键快捷菜单打开编辑查询对话框进行修改测试。
●复制SQL查询表技巧:针对同一数据源创建多个SQL查询表时,第二个及以后的查询表可以不用通过菜单操作,而直接把第一个SQL查询表的全部区域进行复制(显然比通过菜单操作要快得多),然后修改SQL语句即可。
注意:当你的被复制的SQL查询表只返回一个值时,也就是只有一个字段名,一个结果值,显示上只有一列两行,实际要复制的时候必须复制一列3行,即把结果值下面的那个单元格也一起复制,否则复制过去的就不是查询表,右键点击就不会有“编辑查询”菜单(经本人测试,EXCEL2007/2010版本创建的SQL查询表不存在此问题)。
●调试复杂SQL语句技巧(比如用到嵌套查询或联合查询或子句较多):可以将SQL语句分割成多个独立的查询分语句或去掉一些复杂子句,然后逐一测试分语句或逐步添加子句,这样便于发现问题,或观察中间结果是否与自己的期望结果一致。
●注意检查源表字段的数据类型:这个其实不叫技巧,但需要引起重视,尤其是出现古怪的结果的时候。
尽量采用规范的表格数据结构,同一个字段的数据类型要注意保持一致,否则可能出现意想不到的结果,超出你的期望。
4.SQL函数分类EXCEL2003中的SQL函数主要有如下几类(共有88个):●聚合函数(也有称作“合计函数”、“聚集函数”等其他叫法的,我们主要注重学习用法。
)●字符串相关函数●日期时间函数●数学函数●测试函数●流程控制函数二、聚合函数这一部分主要参考了《Microsoft Jet SQL语言参考》中的内容,并结合本人的测试示例和一些亲身体会来介绍。
聚合函数主要有:●Sum 函数●Count 函数●Avg 函数●Min, Max 函数●First, Last 函数●StDev, StDevP 函数●Var 和 VarP 函数注意:使用聚合函数的查询必须要有from子句。
1.Sum 函数返回值:包含在指定查询字段中一组值的总计。
语法: Sum(expr)其中 expr 代表一个字符串表达式,它或者标识一个字段,该字段包含要计算的数据;或者是一个表达式,它使用此字段中的数据来执行计算。
expr 中的运算对象可能包括一个表字段名,一个常数或一个函数(可能是内在的,也可能是用户自定义的,但不是 SQL 聚合函数)。
说明:Sum 函数会忽略包含Null 字段的记录。
可以在一个查询表达式之中使用Sum 函数。
你也可以在具备SQL 特性的QueryDef 对象中或在创建基于SQL查询的Recordset 对象时使用这一表达式。
示例:示例1-1:查询各省份的发货数量小计:select 省份,sum(数量) as 数量小计from [发货清单$] group by 省份示例1-2:统计发货总数量:select sum(数量) as 总数量from [发货清单$]示例1-3:统计湖南省2009年发货总数量:select sum(数量) as 2009年湖南发货总屏数from [发货清单$] where 省份='湖南' and 发货日期between #2009-1-1# and #2009-12-31# 注意:在EXCEL2003中,上述示例1-2、示例1-3 的返回值虽然都是一个,只有2个单元格(包括字段名称)有显示内容,但所在的SQL查询结果占用了3个单元格(包括第3行所在同列的单元格)。