当前位置:首页 » 编程语言 » 关于f的sql表达式
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

关于f的sql表达式

发布时间: 2023-07-08 22:36:42

sql的问题

说明:复制表(只复制结构,源表名:a 新表名:b)

SQL: select * into b from a where 1<>1

说明:拷贝表(拷贝数据,源表名:a 目标表名:b)

SQL: insert into b(a, b, c) select d,e,f from b;

说明:显示文章、提交人和最后回复时间

SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

说明:外连接查询(表名1:a 表名2:b)

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

说明:两张关联表,删除主表中已经在副表中没有的信息

SQL:

delete from info where not exists ( select * from infobz where info.infid=infobz.infid )

说明:--

SQL:

SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE

FROM TABLE1,

(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE

FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND

FROM TABLE2

WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,

(SELECT NUM, UPD_DATE, STOCK_ONHAND

FROM TABLE2

WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =

TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,

WHERE X.NUM = Y.NUM (+)

AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B

WHERE A.NUM = B.NUM

说明:--

SQL:

select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩

说明:

数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)

SQL:

SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC

FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration

FROM TELFEESTAND a, TELFEE b

WHERE a.tel = b.telfax) a

GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')

说明:四表联查问题:

SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

说明:得到表中最小的未使用的ID号

SQL:

SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID

FROM Handle

WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。

SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000);

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,200000);

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000);

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL);

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis');

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column { ,column})]

VALUES

(columnvalue [{,columnvalue}]);

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables;

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES;

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES;

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES;

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [{, columns}])| *

FROM table [ {, table}]

[ORDER BY column [ASC] | DESC

[ {, column [ASC] | DESC }]];

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates];

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于 <>

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY > 50000;

这一查询将返回年薪高于$50,000.00的职员(参见表7)。

逻辑连接符

有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';

在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';

有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:

SELECT * FROM EMPLOYEES

WHERE NOT(BRANCH_OFFICE = 'Boston');

关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。

断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:

SELECT * FROM EMPLOYEES

WHERE (LAST_NAME = 'Jones'

AND FIRST_NAME = 'Indiana')

OR (LAST_NAME = 'Smith'

AND FIRST_NAME = 'Bessie');

SQL沿用数学上标准的表达式求值的约定—圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。

以上对逻辑连接符进行了说明,在对下面的内容进行说明之前,我们再一次对SELECT语句的语法进行更新:

SELECT [DISTINCT]

(column [{, column } ] )| *

FROM table [ { , table} ]

[ORDER BY column [ASC] | [DESC

[{ , column [ASC] | [DESC } ] ]

WHERE predicate [ { logical-connector predicate } ];

NULL和三值逻辑

在SQL中NULL是一个复杂的话题,关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理,并且你也很可能会遇到它,所以我们还是简略地进行一下说明。

首先,在断言中进行NULL判断时需要特殊的语法。例如,如果用户需要显示所有年薪未知的职员的全部信息,用户可以使用如下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE SALARY IS NULL;

相反,如果用户需要所有已知年薪数据的职员的信息,你可以使用以下语句:

SELECT * FROM EMPLOYEES

WHERE SALARY IS NOT NULL;

请注意我们在列名之后使用了关键字IS NULL或IS NOT NULL,而不是标准的比较形式:COLUMN = NULL、COLUMN <> NULL或是逻辑操作符NOT(NULL)。

这种形式相当简单。但当你不明确地测试NULL(而它们确实存在)时,事情会变得很混乱。

例如,回过头来看我们图1中的EM-PLOYEES表,可以看到Indiana Jones的工薪等级或年薪值都是未知的。这两个列都包含NULL。可以想象运行如下的查询:

SELECT * FROM EMPLOYEES

WHERE GRADE <= SALARY;

此时,Indiana Jones应该出现在结果表中。因为NULL都是相等的,所以可以想象它们是能够通过GRADE小于等于SALARY的检查的。这其实是一个毫无疑义的查询,但是并没有关系。SQL允许进行这样的比较,只要两个列都是数字类型的。然而,Indiana Jones并没有出现在查询的结果中,为什么?

正如我们早先提到过的,NULL表示未知的值(而不是象某些人所想象的那样表示一个为NULL的值)。对于SQL来说意味着这个值是未知的,而只要这个值为未知,就不能将其与其他值比较(即使其他值也是NULL)。所以SQL允许除了在true 和false之外还有第三种类型的真值,称之为“非确定”(unknown)值。

如果比较的两边都是NULL,整个断言就被认为是非确定的。将一个非确定断言取反或使用AND或OR与其他断言进行合并之后,其结果仍是非确定的。由于结果表中只包括断言值为“真”的行,所以NULL不可能满足该检查。从而需要使用特殊的操作符IS NULL和IS NOT NULL。

UPDATE语句

UPDATE语句允许用户在已知的表中对现有的行进行修改。

例如,我们刚刚发现Indiana Jones的等级为16,工资为$40,000.00,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。

UPDATE EMPLOYEES

SET GRADE = 16, SALARY = 40000

WHERE FIRST_NAME = 'Indiana'

AND LAST_NAME = 'Jones';

上面的例子说明了一个单行更新,但是UPDATE语句可以对多行进行操作。满足WHERE条件的所有行都将被更新。如果,你想让Boston办事处中的所有职员搬到New York,你可以使用如下语句:

UPDATE EMPLOYEES

SET BRANCH_OFFICE = 'New York'

WHERE BRANCH_OFFICE = 'Boston';

如果忽略WHERE子句,表中所有行中的部门值都将被更新为'New York'。

UPDATE语句的语法流图如下面所示:

UPDATE table

SET column = value [{, column = value}]

[ WHERE predicate [ { logical-connector predicate}]];

DELETE语句

DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:

DELETE FROM EMPLOYEES

WHERE BRANCH_OFFICE = 'Los Angeles';

如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。

DELETE语句的语法流图如下面所示:

DELETE FROM table

[WHERE predicate [ { logical-connector predicate} ] ];

现在我们完成了数据操作语言(DML)的主要语句的介绍。我们并没有对SQL能完成的所有功能进行说明。SQL还提供了许多的功能,如求平均值、求和以及其他对表中数据的计算,此外SQL还能完成从多个表中进行查询(多表查询,或称之为连接)的工作。这种语言还允许你使用GRANT和REVOKE命令控制使用者的数据访问权限。

Visual C++中实现对图像数据的读取显示
2003-12-9加入 来自yesky 作者刘 涛 4条评论 点击3030次

在利用VC进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取出来并显示,图像数据与文本字段不同,它是作为OLE字段在数据库中存储,通过数据集对象的成员变量自动交换得到的图像数据,得到的数据并不能直接显示,如何处理图像数据,一直是数据库编程中的一个难点,目前关于VC进行数据库编程的资料不少,但很少涉及图像数据的操作,笔者针对一现状,结合自己开发的一个项目,解决了如何显示数据库中的图像这一问题,本文以操作ACESS数据库为例子,讲解一下自己的实现思路,希望对爱好VC编程的朋友们有所帮助,以起到抛砖引玉的作用。

为了简化问题,该数据库的表中只有一个名为Images的OLE字段,我使用DAO连接操作数据库,读取的图像数据显示在一个对话框上,至于使用ODBC、DAO还是ADO,这要根据具体情况而定,但无论使用哪一种,对图像的显示来说,实现的过程是大同小异的。由于篇幅有限,文章中对如何实现数据库的连接不再作具体的说明,有兴趣的读者朋友可以参考VC数据库编程的资料。实现过程中,首先定义一个CDaoRecordset的子类 CimageData如下:

class CimageData : public CDaoRecordset
{
public:
CimageData (CDaoDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CimageData)
file://{{AFX_FIELD(CimageData, CDaoRecordset)
CByteArray m_Images;//声明字节数组用来存放图像数据
file://}}AFX_FIELD
// Overrides
// ClassWizard generated virtual function overrides
file://{{AFX_VIRTUAL(CimageData)
public:
virtual CString GetDefaultDBName();
virtual CString GetDefaultSQL();
virtual void DoFieldExchange(CDaoFieldExchange* pFX);
file://}}AFX_VIRTUAL

该类的实现为:

CimageData:: CimageData (CDaoDatabase* pdb)
: CDaoRecordset(pdb)
{
file://{{AFX_FIELD_INIT(CimageData)
m_nFields = 1;//数据库的表中仅有一个字段
file://}}AFX_FIELD_INIT
m_nDefaultType = dbOpenDynaset;//以动态集方式打开数据库
}
CString CimageData::GetDefaultDBName()
{
return _T("E:\\IMAGES.mdb");//默认的ACESS数据库在E盘,名为IMAGES
}

CString CimageData::GetDefaultSQL()
{
return _T("[Table]");//默认打开数据库中名为"Table"的表
}

void CimageData::DoFieldExchange(CDaoFieldExchange* pFX)
{
file://{{AFX_FIELD_MAP(CimageData)
pFX->SetFieldType(CDaoFieldExchange::outputColumn);
DFX_Binary(pFX, _T("[Images]"), m_Images);//以二进制方式在Images字段和m_Images变量间交换数据
file://}}AFX_FIELD_MAP
}

有了该类,就可以定义相应的对象来与数据库中的图像字段交换数据,下面定义的函数GetImageData()说明了如何根据读取的OLE字段数据生成待显示的图像,需要注意的是该函数中使用的CBitmap类的变量Bitmap是预定义的一个全局变量:

BOOL CImageDlg:: GetImageData(CByteArray & DBArray)
{
CByteArray Array;
Array.Copy( DBArray);
int HeaderLen = 78 + sizeof(BITMAPFILEHEADER); file://确定图像头信息的起始位置
Array.RemoveAt( 0, HeaderLen ); // 移动到图像头信息的起始位置
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)Array.GetData() ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)Array.GetData() ;
file://得到图像数据的头信息
int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount;
file://确定图像的颜色数
LPVOID lpDIBBits;
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits=(LPVOID)((LPDWORD)(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
file://得到图像各个像素的具体数据
CClientDC dc(NULL);
HBITMAP hBmp = CreateDIBitmap( dc.m_hDC,
&bmiHeader,
CBM_INIT,

⑵ SQL Server 2008 R2如何使用正则表达式搜索

使用正则表达式进行查找若要在“快速查找”、“在文件中查找”、“快速替换”或“在文件中替换” 操作过程中,在“查找内容”字段启用正则表达式,请在“查找选项”下选中“使用”,再选择“正则表达式”。“查找内容”字段旁边的“引用列表”三角形按钮将变为可用状态。单击此按钮可显示一组最常用的正则表达式。如果选择了表达式生成器中的某个项,则可将该项插入“查找内容”字符串。注意“查找内容”字符串中使用的正则表达式与 Microsoft .NET Framework 编程中的有效正则表达式相比,语法上存在差异。例如,在“查找和替换”对话框中,大括号 {} 用于表示带标记的表达式。所以,表达式“zo{1}”将匹配所有“zo”后带标记 1 的匹配项,如“Alonzo1”和“Gonzo1”。但在 .NET Framework 中,{} 符号用于表示量词。因此,表达式“zo{1}”将匹配所有“z”后跟一个“o”的匹配项,如匹配“zone”,但不匹配“zoo”。下表对“引用列表”中提供的正则表达式进行了说明。 表达式语法说明任何单个字符.匹配除换行符外的所有单一字符。零个或更多*匹配零或更多前导表达式的匹配项,执行所有可能的匹配。一个或更多+匹配至少一个前导表达式的匹配项。行首^仅匹配行首位置的字符串。行尾$仅匹配行尾位置的字符串。字首<仅匹配文本中以此开头的字。字尾>仅匹配文本中以此结尾的字。分行符\n匹配与平台无关的换行符。在替换表达式中,插入一个换行符。在集合中的任何一个字符[]匹配[] 中的任何一个字符。若要指定字符范围,请列出起始字符和结束字符,并用短划线 (-) 分隔,如 [a-z]。不在集合中的任何一个字符[^...]匹配不在 ^ 之后的字符集中的任何一个字符。或|匹配“或”符号 (|) 两旁的任一表达式。常用于组中。例如,(sponge|mud) bath 可以匹配“sponge bath”和“mud bath”。Escape\将反斜杠 (\) 后的字符作为文字匹配。此表达式允许您搜索正则表达式标记中使用的符号,如 { 和 ^。例如, \^ 可用于查找字符 ^。标记表达式{}匹配用括起来的表达式内的文本。C/C++ 标识符:i匹配表达式 ([a-zA-Z_$][a-zA-Z0-9_$]*)。用引号括起来的字符串:q匹配表达式 (("[^"]*")|('[^']*'))。空格或制表符:b匹配空格或制表符。整数:z匹配表达式 ([0-9]+)。“引用列表”中只列出了部分可在“查找和替换”操作中使用的正则表达式。还可以将下列任一正则表达式插入“查找内容”字符串: 表达式语法说明最少- 零个或更多@匹配零个或更多前导表达式的匹配项,匹配尽可能少的字符。最少- 一个或更多#匹配一个或更多前导表达式的匹配项,匹配尽可能少的字符。重复n 次^n匹配前导表达式的 n 个匹配项。例如,[0-9]^4 匹配所有四位数序列。分组()将子表达式分组第n 个标记文本\n在“查找或替换”表达式中,指示匹配第 n 个标记表达式的文本,其中 n 为 1 到 9 之间的数字。在“替换”表达式中,\0 将插入完整的匹配文本。右对齐字段\(w,n)在“替换”表达式中,在宽度至少为 w 个字符的字段中,右对齐第 n 个标记表达式。左对齐字段\(-w,n)在“替换”表达式中,在宽度至少为 w 个字符的字段中,左对齐第 n 个标记表达式。阻止匹配~(X)如果在表达式的此处出现 X,则阻止匹配。例如,real~(ity) 匹配“realty”和“really”中的“real”,但不匹配“reality”中的“real”。字母数字字符:a匹配表达式 ([a-zA-Z0-9])。字母字符:c匹配表达式 ([a-zA-Z])。十进制数字:d匹配表达式 ([0-9])。十六进制数:h匹配表达式 ([0-9a-fA-F]+)。有理数:n匹配表达式 (([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))。字母字符串:w匹配表达式 ([a-zA-Z]+)。Escape\eUnicode U+001B。响铃\gUnicode U+0007。Backspace\hUnicode U+0008。制表符\t匹配制表符,Unicode U+0009。Unicode 字符\x#### 或 \u####匹配由 Unicode 值确定的字符,其中 #### 为十六进制数字。可以使用 ISO 10646 码位或给出代理项对值的两个 Unicode 码位,指定基本多语言面(即代理项)以外的字符。下表列出了按标准 Unicode 字符属性匹配时的语法。双字母缩写和 Unicode 字符属性数据库中列出的缩写相同。可以将这些缩写指定为字符集的一部分。例如,表达式 [:Nd:Nl:No] 匹配任何数字。 表达式语法说明大写字母:Lu匹配任何单个大写字母。例如,:Luhe 匹配“The”,但不匹配“the”。小写字母:Ll匹配任何单个小写字母。例如,:Llhe 匹配“the”,但不匹配“The”。标题大写字母:Lt匹配一个大写字母后跟一个小写字母的字符,例如 Nj 和 Dz。修饰字母:Lm匹配字母或标点符号(如逗号、交叉重音符和秒号),这些字母或标点符号是用于修饰前导字母的。其他字母:Lo匹配其他字母,如歌特字母 ahsa。十进制数字:Nd匹配十进制数字(如 0-9)及其全角对等数字。字母数字:Nl匹配字母数字,如罗马数字和零的表意数字。其他数字:No匹配其他数字,如旧斜体数字一。左标点:Ps匹配左标点,如左小括号和左大括号。右标点:Pe匹配右标点,如右小括号和右大括号。左引号:Pi匹配左双引号。右引号:Pf匹配单引号和右双引号。划线号:Pd匹配划线号。连接号:Pc匹配下划线符号。其他标点:Po匹配(,)、?、"、!、@、#、%、&、*、\、(:)、(;)、' 和 /。空格分隔符:Zs匹配空格。行分隔符:Zl匹配Unicode 字符 U+2028。段落分隔符:Zp匹配Unicode 字符 U+2029。不占位标记:Mn匹配不占位标记。合并标记:Mc匹配合并标记。封闭标记:Me匹配封闭标记。数学符号:Sm匹配+、=、~、|、< 和 >。货币符号:Sc匹配$ 和其他货币符号。修饰符号:Sk匹配修饰符号,如抑扬符、重音符和长音符。其他符号:So匹配其他符号,如版权符号、段落标记和度数符号。其他控制:Cc匹配行尾。其他格式:Cf格式化控制字符,如双向控制字符。代理项:Cs匹配代理项对的一半。其他专门用途:Co匹配任何专用区域的字符。其他未分配字符:Cn匹配未映射到 Unicode 字符的字符。除了标准的 Unicode 字符属性以外,还可以将下列附加属性指定为字符集的一部分。 表达式语法说明字母:Al匹配任何单字符。例如,:Alhe 匹配“The”、“then” 和“reached”之类的字。Numeric:Nu匹配任何数字。标点:Pu匹配任意一个标点符号,如 ?、@、' 等等。空格:Wh匹配任何类型的空格,包括印刷空格和表意空格。双向:Bi匹配自右至左书写的字符,如阿拉伯语和希伯莱语字符。朝鲜文字:Ha匹配朝鲜文字字母和组合字母。平假名:Hi匹配平假名字符。片假名:Ka匹配片假名字符。象形/汉字/日文汉字:Id匹配象形字符,如汉字和日文汉字。用于查找文本的正则表达式Expression Studio 4.0 其他版本 此主题尚未评级 - 评价此主题 通过使用正则表达式,可以在 Microsoft Expression Web 中执行繁复的查找和替换操作。如果您不知道所要查找的确切文本或代码,或者要查找文本或代码字符串的多个匹配项,则可以使用正表达式。正则表达式是一种文本模式,它可以描述所要查找的文本的一种或多种变体。正则表达式由特定字符(如字母“a”到“z”)和描述文本模式的特殊字符(如星号“*”)组成。例如,要在网站中查找“page”的所有变体,可以搜索“page*”。这样,Expression Web 将在网站中查找“page”、“pages”、“pager”以及以“page”开头的任何其他单词的所有实例。在搜索中使用正则表达式时,特定的规则将控制哪些字符组合将执行特定的匹配操作。每种正则表达式(或正则表达式的组合)都称为“语法”。可以在一个语法中使用多个正则表达式以精确匹配要搜索的目标。若要使用正则表达式,请参阅使用查找和替换编辑多个网页。正则表达式语法 语法表达式说明.任意字符 用作换行符 (\n) 以外的任何单个打印或非打印字符的通配符。例如,正则表达式 c.t 可匹配 cat、c t、cot 等字符串,但不能匹配 cost。在本例中,句点 (.) 是一个代表单个字符的通配符。它出现在字母“c”和“t”之间,因此字符“c”和“t”之间的任何单个字符都与表达式匹配 - 即使是空格也一样。*最大为零或更多 用于匹配在此表达式之前出现零次或更多次的某个字符,可与尽可能多的字符相匹配。正则表达式 .* 用于匹配某个出现零次或更多次的字符。例如,正则表达式 b.*k 可匹配 book、back、black、blank 和 buck。在本例中,将句点 (.) 和星号 (*) 组合成一个语法。句号 (.) 紧挨在星号 (*) 表达式之前。星号 (*) 可匹配“b”和“k”之间任意出现零次或更多次的字符。句点 (.) 用作“b”和“k”之间字符的通配符。在本例中,它表示“b”和“k”之间的任意字符都可以反复出现。+最大为一或更多 用于匹配在此表达式之前出现一次或更多次的某个字符,可与尽可能多的字符相匹配。正则表达式 .+ 用于匹配某个出现一次或更多次的字符。例如,正则表达式 bo+. 可匹配 bob、book 和 boot。在本例中,将句点 (.) 和加号 (+) 组合成一个语法。句号 (.) 紧挨在加号 (+) 表达式之后。加号 (+) 可与出现一次或更多次的字母“o”相匹配。句点 (.) 用作每个单词的最后一个字符的通配符。在本例中,该字符为“b”、“k”和“t”。@最小为零或更多 用于匹配在此表达式之前出现零次或更多次的某个字符,可与尽可能少的字符相匹配。正则表达式 .@ 用于匹配某个出现零次或更多次的字符。例如,正则表达式 a.@x 可匹配“abxbxb”中的“abx”和“acxcxc”中的“acx”。在本例中,将句号 (.) 和 @ 符号组合成一个语法。句点 (.) 紧挨在 @ 符号表达式之前。@ 符号可与“a”和“x”之间出现零次或更多次的任意字符相匹配。在本例中,句点 (.) 用作字符“a”和“x”之间的字符“b”和“c”的通配符。#最小为一或更多 用于匹配在此表达式之前出现一次或更多次的某个字符,可与尽可能少的字符相匹配。例如,正则表达式 si.#er 可匹配“sicker”或“silkier”。在本例中,将句号 (.) 和井号 (#) 组合成一个语法。句点 (.) 紧挨在井号 (#) 表达式之前。井号 (#) 可与“si”和“er”之间出现一次或更多次的任意字符相匹配。句点 (.) 用作单词 sicker 中字符“c”和“k”的通配符,以及单词 silkier 中“l”、“k”和“i”的通配符。[ ]字符集 用于匹配括号 ([ ]) 内的任意一个字符。可以使用连字符 (-) 指定字符的范围,例如 [a-z]。例如:正则表达式 c[aou]t 可以匹配 cat、cot 和 cut,但不能匹配 cet 或 cit。正则表达式 [0-9] 表示匹配任意一个数字。也可以指定多个字母范围。正则表达式 [A-Za-z] 表示匹配所有大写和小写字母。^行首 定位于行首匹配。例如,正则表达式 ^When in 匹配以“When in”开头且出现于行首的任意字符串,例如“When in the course of human events”或“When in town, call me”。然而,此正则表达式不匹配出现于行首的“What and when in the course of human events”。$行尾 定位于行尾匹配。例如,正则表达式 professional$ 可匹配字符串“He is a professional”,但不能匹配字符串“They are a group of professionals”。^^文件开头 定位于文件开头匹配。仅适用于在源代码或文本文件中搜索文本。例如,若要匹配文件开头的第一个 HTML 标记,请使用此正则表达式:^^$$文件末尾 定位于文件末尾匹配。仅适用于在源代码或文本文件中搜索文本。例如,若要匹配文件末尾的最后一个 HTML 标记(标记后没有空格),可使用此正则表达式:$$|或 表示在两项之间进行选择,即匹配“或”符号 (|) 前面或后面的表达式。例如,正则表达式 (him|her) 匹配下列各项:“it belongs to him”或者“it belongs to her”但不匹配行“it belongs to them”。\转义特殊字符 用于匹配反斜线 (\) 后面的字符。这样,就可以查找正则表达式语法中使用的字符(如左大括号 ({) 或脱字号 (^))或其他一些特殊字符。例如,使用 \$ 可匹配美元符号 ($) 字符,而不是执行用于“定位于行尾”的正则表达式。同样,使用 \. 可匹配句号 (.) 字符,而不是像句号 (.) 正则表达式一样匹配任意一个字符。{}标记表达式 对与括号内表达式匹配的文本加标记。可以使用 \N 在“查找”表达式中匹配出现在另一处的标记文本或者将标记文本插入“替换”表达式。例如,假设要查找连续出现两次的单词。若要搜索,请使用此表达式:{.#} \1假设连续出现的单词由一个空格隔开,则需要在右大括号 (}) 与反斜线 (\) 之间添加一个空格。在本例中,将井号 (#)、句号 (.) 和大括号 ({}) 组合成一个语法。在此表达式中,.# 表示任何连续的字符。因为这部分表达式位于大括号 ({}) 内,所以连续的字符将被加上标记,并被引用为 \1。此表达式将查找后跟空格以及字符与其完全相同的任意连续字符。\N第N 个标记表达式 在“查找”表达式中,\N 匹配由第 N 个标记表达式指定的文本,其中 N 是 1 到 9 的数字。在“替换”表达式中,\N 插入由第 N 个标记表达式匹配的文本,其中 N 是 1 到 9 之间的数字。\0 插入整个“查找”表达式指定的文本。例如,假设要查找连续出现两次的单词,并使用一个单词替换它们。若要搜索,请使用此表达式:.#} \l假设连续出现的单词由一个空格隔开,则需要在右大括号 (}) 与反斜线 (\) 之间添加一个空格。在本例中,将井号 (#)、句号 (.) 和大括号 ({}) 组合成一个语法。若要替换,请使用下列表达式:\l\1 表示在查找字符串中的第一对大括号内找到的内容。通过在替换操作中使用 \1,实际上是将连续出现两次的单词替换为一个单词。( )组表达式 标记子表达式的开始和结束。子表达式指括在 ( ) 中的正则表达式,例如表达式:(ha)+。在本例中,将加号 (+) 与括号 ( ) 组表达式组合成一个语法。子表达式是 (ha),因为它括在括号 ( ) 内。添加加号 (+) 后,该表达式可查找重复的字母对。加号 (+) 表示“ha”出现一次或更多次。此表达式可匹配下列各项:“haha”和“hahaha”。~x防止匹配 当x 出现在表达式中的此位置时会防止匹配。例如,正则表达式 real~(ity) 可匹配“realty”和“really”中的“real”,但不能匹配“reality”中的“real”。\n换行符 用于匹配“代码”视图中的新行,或“设计”视图中的 <br>。语法(\n) 是匹配所有换行符的简便方法。\t制表符 用于匹配单个制表符。例如,如果要查找所有位于行首的制表符,可使用此正则表达式:^\t+在本例中,将脱字号 (^)、加号 (+) 和制表符 (\t) 组合成一个语法。脱字号 (^) 位于单个制表符表达式之前,用于匹配位于行首的所有制表符。加号 (+) 表示匹配一个或多个制表符。[^]任何一个不属于该集合的字符 用于匹配不包含在脱字号 (^) 之后的字符集内的任何字符。例如,若要匹配范围之外的任何字符,可使用脱字号 (^) 作为左括号后面的第一个字符。表达式 [^269A-Z] 匹配除 2、6、9 以及任何大写字母之外的所有字符。n重复表达式 用于匹配脱字号 (^) 之前出现 n 次的表达式。例如,若 n 为 4,表达式 [0-9]^4 匹配任何 4 位数序列。在本例中,将字符集 ([ ]) 语法与重复 (^n) 语法组合,以展示正则表达式的更实用的方法。:a字母数字字符 用于匹配表达式 [a-zA-Z0-9]。可以使用表达式 [a-zA-Z0-9] 匹配出现一次的字母(大写或小写)或数字。也称为“字母数字匹配项”。可使用简写表达式 :a 来代替 [a-zA-Z0-9]。:b空格 用于匹配代码或文本中的任何空格。例如,若要匹配行首的单个空格字符,请使用此正则表达式:^:b:c字母字符 用于匹配表达式 [a-zA-Z]。使用此表达式时,可以匹配所有大写或小写字母。可以使用简写表达式 :c 来代替所有 [a-zA-Z]。:d十进制数 用于匹配表达式 [0-9]。利用此表达式可以匹配任何数字。例如,假设要在文本文件中查找美国的社会福利号。美国的社会福利号的格式为 999-99-9999。:d^3-:d^2-:d^4 或 [0-9]^3-[0-9]^2-[0-9]^4(使用 [0-9] 表示)可返回相同的结果。可使用简写表达式 :d 来代替所有 [0-9]。:h十六进制数 用于匹配表达式 [0-9a-fA-F]+使用此表达式可匹配由“A”和“F”之间的大写或小写字母和任意数字组成的十六进制数。例如,假设网站中的网页使用了多种不同的背景色,而您要将这些网页的颜色改为黑色(即 000000)。但是,您不知道现有颜色的十六进制值。使用此正则表达式可查找所有的现有十六进制值:\#:h可以使用 [0-9a-fA-F] 进行搜索,但在本例中,将反斜线 (\)、井号 (#) 和十六进制数字 (:h) 语法组合在一起。\# 匹配非表达式的井号 (#),而 :h 匹配任何十六进制字符序列。若要替换现有十六进制数值,可键入所需背景颜色的十六进制数值: 000000:i标识符 用于匹配表达式 [a-zA-Z_$][a-zA-Z0-9_$]*处理代码时,如果需要匹配所有程序标识符,可使用简写表达式 :i,而无需键入上述冗长的表达式。:n有理数 用于匹配表达式 ([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)|([0-9]+)如果需要匹配带小数点的整个数值,可使用简写表达式 :n,而无需键入上述冗长的表达式。:q带引号的字符串 用于匹配表达式 ("[~"]*")|('[~']*')如果需要匹配加引号的所有引号,可使用简写表达式 :q,而无需键入上述冗长的表达式。:w字母字符串 用于匹配表达式 [a-zA-Z]+此语法是一种可匹配一个或多个大写或小写字母字符的简便方法。:z整数 用于匹配表达式 [0-9]+此语法是一种可匹配任何整数的简便方法。

⑶ 求教,sql的if如何使用

SQLServerIF用法:
IF条件表达式
BEGIN
SQL语句
END
ELSE
BEGIN
SQL语句
END
设置一个变量@sex,如果@sex为’F’,
那么查询Employees中所有TitleOfCourtesy为’Ms.’或
’Mrs.’的所有记录;如不是,查询剩下的纪录。

declare@sexchar(1)
set@sex='M'
if@sex='F'
begin
select*fromEmployees
whereTitleOfCourtesy='Ms.'
orTitleOfCourtesy='Mrs.'
end
else
begin
select*fromEmployees
whereTitleOfCourtesy<>'Ms.'
andTitleOfCourtesy<>'Mrs.'
end

⑷ sql正则表达式常用符号

SQL的查询语句中,有时会需要引进正则表达式为其复杂搜索指定模式。下面给出一些Regexp在
MYSQL语句中应用(非全部):
1) ^
匹配字符串的开始部分。
mysql> SELECT 'fo\nfo' REGEXP '^fo$'; -> 0mysql> SELECT 'fofo' REGEXP '^fo'; -> 12) $
匹配字符串的结束部分。
mysql> SELECT 'fo\no' REGEXP '^fo\no$'; -> 1mysql> SELECT 'fo\no' REGEXP '^fo$'; -> 03) .
匹配任何字符(包括回车和新行)。
mysql> SELECT 'fofo' REGEXP '^f.*$'; -> 1mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$'; -> 14)
[:character_class:]
在括号表达式中(使用[和]),[:character_class:]表示与术语类的所有字符匹配的字符类。标准的类名称是:
alnum
文字数字字符
alpha
文字字符
blank
空白字符
cntrl
控制字符
digit
数字字符
graph
图形字符
lower
小写文字字符
print
图形或空格字符
punct
标点字符
space
空格、制表符、新行、和回车
upper
大写文字字符
xdigit
十六进制数字字符
它们代表在ctype(3)手册页面中定义的字符类。特定地区可能会提供其他类名。字符类不得用作范围的端点。
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+'; -> 1
mysql> SELECT '!!' REGEXP '[[:alnum:]]+'; -> 0
5) [[:<:]], [[:>:]]
这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字
字符。字字符是alnum类中的字母数字字符或下划线(_)。
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1mysql> SELECT 'a xword a' REGEXP
'[[:<:]]word[[:>:]]'; -> 0要想在正则表达式中使用特殊字符的文字实例,应在其前面加上2个反斜杠“\”字符。
MySQL解析程序负责解释其中一个,正则表达式库负责解释另一个。例如,要想与包含特殊字符“+”的字符
串“1+2”匹配,在下面的正则表达式中,只有最后一个是正确的:
mysql> SELECT '1+2' REGEXP '1+2'; -> 0mysql> SELECT '1+2' REGEXP '1\+2'; -> 0mysql> SELECT
'1+2' REGEXP '1\\+2'; -> 1 其他的有关Regexp的语法,可直接参考下表:字符 含意
\ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意
为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将
只匹配"a*"。
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1...$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[\b] 匹配一个退格符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配
"$5.98"中的5,等于[a-zA-Z0-9]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

⑸ SQL语句 包含怎么写

使用SQL 通配符可以替代一个或多个字符,即模糊查询,也就是包含关系。

SQL 通配符必须与 LIKE 运算符一起使用。在 SQL 中,可使用以下通配符如下:

1、% 替代一个或多个字符

2、_ 仅替代一个字符

3、[charlist] 字符列中的任何单一字符

4、[^charlist]或者[!charlist]不在字符列中的任何单一字符


以图中表格为例,说明一下各通配符用法

1、 查询居住在以 "Ne" 开始的城市里的人:

SELECT * FROM PersonsWHERE City LIKE 'Ne%'

2、查询居住在包含 "lond" 的城市里的人:

SELECT * FROM PersonsWHERE City LIKE '%lond%'

3、查询名字的第一个字符之后是 "eorge" 的人:

SELECT * FROM PersonsWHERE FirstName LIKE '_eorge'

4、查询记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":

SELECT * FROM PersonsWHERE LastName LIKE 'C_r_er'

5、查询居住的城市以 "A" 或 "L" 或 "N" 开头的人:

SELECT * FROM PersonsWHERE City LIKE '[ALN]%'

6、查询居住的城市不以"A" 或 "L" 或 "N" 开头的人:

SELECT * FROM PersonsWHERE City LIKE '[!ALN]%'