SQL Server 2000实现一则按类似VB VAL函数功能排序的案例
最近,在项目维护时,碰到对以下的数据进行排序处理:
排序前:
班级 |
照片名称 |
机械1班 |
1张三.jpg |
机械1班 |
7李四.jpg |
机械1班 |
3王五.jpg |
财会2班 |
3如花.jpg |
财会2班 |
6像花.jpg |
财会2班 |
1真花.jpg |
体育1班 |
3铁男.jpg |
体育1班 |
1猛男.jpg |
财会2班 |
10若花.jpg |
体育1班 |
30衰男.jpg |
排序后(要实现的结果):
班级 |
照片名称 |
财会2班 |
1真花.jpg |
财会2班 |
3如花.jpg |
财会2班 |
6像花.jpg |
财会2班 |
10若花.jpg |
机械1班 |
1张三.jpg |
机械1班 |
3王五.jpg |
机械1班 |
7李四.jpg |
体育1班 |
1猛男.jpg |
体育1班 |
3铁男.jpg |
体育1班 |
30衰男.jpg |
也许有人会说,这还不简单,只要输入"SELECT 班级, 照片名称 FROM [Table] ORDER BY 班级, 照片名称"语句,不就出结果了吗?事实如此吗,请看此SQL语句执行后的结果:
班级 |
照片名称 |
财会2班 |
10若花.jpg |
财会2班 |
1真花.jpg |
财会2班 |
3如花.jpg |
财会2班 |
6像花.jpg |
机械1班 |
1张三.jpg |
机械1班 |
3王五.jpg |
机械1班 |
7李四.jpg |
体育1班 |
1猛男.jpg |
体育1班 |
30衰男.jpg |
体育1班 |
3铁男.jpg |
是不是与预期的结果有很大的出入呢? 怎样解决这问题,实现想要的结果呢?由于SQL Server没有类似VB的VAL函数,因此想实现如上数据的排序,将比较困难。不过,只要执行以下SQL语句就可以了,今天免费赠送了。废话少说,亮代码:
SELECT 班级, 照片名称
FROM (SELECT *, CASE WHEN (UNICODE(SUBSTRING(photo, 1, 1)) BETWEEN 48 AND
57) AND NOT (UNICODE(SUBSTRING(photo, 2, 1)) BETWEEN 48 AND 57)
THEN SUBSTRING(photo, 1, 1) WHEN (UNICODE(SUBSTRING(photo, 1, 1))
BETWEEN 48 AND 57) AND (UNICODE(SUBSTRING(photo, 2, 1)) BETWEEN
48 AND 57) THEN SUBSTRING(photo, 1, 2) END AS photoid
FROM (SELECT *, LTRIM(照片名称) AS photo
FROM [TABLE]) l) ll
ORDER BY 班级, CAST(ISNULL(photoid, 0) AS int)
没想到一个简单的功能,要写这么复杂的代码。看来,前人"造轮子"没造全,将会给后面的应用开发人员带来不小的烦恼。
分享到:
相关推荐
在VB.NET 2008中,调用SQL Server存储过程是常见的数据库操作之一,它允许程序员通过预先定义好的数据库函数来执行复杂的数据处理任务。本示例将深入讲解如何在VB.NET中调用存储过程,包括参数传递、接收返回值、...
2. **函数库**:VB内置了丰富的函数库,如数学函数(Sqr、Rnd、Cos等)、字符串函数(Left、Right、Mid、InStr等)、日期和时间函数(Date、Now、Time等)以及转换函数(CType、Val、CStr等)。 3. **对象与控件**...
VB提供了多种内置函数和控件,如IsNumeric、Val等,用于数据类型的转换和有效性检验,确保输入的数据符合业务规则。 四、数据库交互 为了持久存储货物信息,VB仓库管理系统通常会连接到数据库,如Access、SQL ...
- **十六进制解码**: 在`UnicodeDecode`函数中,通过`ChrW(Val("&h" & Left(a(i), 4)))`实现。这里使用`Left`和`Val`函数提取十六进制值,并通过前缀`&h`将其识别为十六进制数,最终通过`ChrW`函数转换为相应的...
- **Previous Page**:点击“上一页”按钮时,如果`lCurrentPage`大于1,则`lCurrentPage`自减1,并调用`Loadcontrol`函数加载新页面。 4. **加载页面数据**: - **Loadcontrol**函数: ```vb Private Sub ...
17. 函数Len:Len函数返回字符串的长度,Str函数将数值转换为字符串,Val函数将字符串转换为数值。因此,Len(Str(Val("123.4")))的值为6,包含小数点。 18. Visual Basic开发环境:在窗体设计器双击窗体会打开代码...
理解面向对象的软件设计基本理论,学习VB软件设计的基本方法,熟悉一般软件项目开发的基本步骤,培养运用VB解决实际问题的能力和技巧。 课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求...
11. **Val函数**:在VB或VBA中,`Val`函数用于提取字符串中的数字部分,遇到非数字字符则停止,所以`Val("76af89")`返回`76`。 12. **ISP含义**:ISP的中文全称为因特网服务提供商,提供互联网接入服务。 13. **...
9. **Val函数**:Val函数用于从字符串中提取数字,遇到非数字字符就停止。在"76af89"中,Val函数会返回数字76。正确答案是B。 10. **Form的RESET按钮**:点击Form的RESET按钮并不会清空所有Form中的元素,只会重置...
12. `Val`函数解析:`Val`函数在VB或VBScript中用于将字符串解析为数值,忽略非数字字符,所以`Val("76af89")`返回的是76。 13. 函数的理解:函数是一种功能抽象,可以提高代码复用和可维护性。A和D正确,但B错误,...
16. Val函数:Val函数用于将字符串中的数字部分转换为数值,"76af89"中只有前两个字符是数字,所以返回值为76(正确答案:B)。 17. Python通讯录管理程序示例: ```python mydic = {} while True: print("="*7, ...
5. 值转换:Val函数用于将字符串转换为数值,Val("123.456")等于123.456(A)。 6. 数据库概念:实体在信息世界中对应数据库术语为记录(D)。 7. HTML语言:HTML是一种超文本标记的页面描述语言(C),用于构建...
13. Val函数:Val函数在VB中用于将字符串转换为数值,"76af89"的前两个数字会被转换为76,所以返回值为76。 14. 邮件发送:在发送邮件时,多个收件人的地址需要用分号(;)而非逗号(,)隔开。 15. 关系数据库:...
7. Val 函数:在 VBA 或 VB 中,Val 函数用于将字符串转换为数值,如果字符串开头是数字,它会忽略非数字部分并返回数字值。 8. 获取字符串最后一个字符:在某些编程语言中,如 Python,可以通过索引来获取字符串的...
在Microsoft SQL Server 2000的企业管理器中完成数据库和数据表的创建,具体SQL脚本请参见附录gz.sql SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_...
17. **Val函数**:Val函数用于将字符串转换为数字,但只识别数字部分,所以Val("123ab")返回123。 18. **栈的性质**:栈是后进先出(Last In First Out, LIFO)的数据结构。 19. **Web.config文件**:这是ASP.NET...
4. 值转换函数:Val函数用于将字符串转换为数值。Val("123.456")会返回123.456,因此答案是A.123.456。 5. 国标码与内码:汉字的国标码是编码的一种,而内码是实际在计算机内部存储的编码。在GBK编码中,国标码加上...
13. Val函数:Val函数将字符串转换为数字,所以`Val("123.456")`返回123.456。 14. Word表格操作:在Word中,当插入点在表格最后一列时,Tab键会增加新行,不是新列。 15. 数据结构:栈遵循“先进后出”原则,适合...
2. Optiongroup属性:在VB(Visual Basic)或其他类似编程环境中,Optiongroup是一种控件,用于创建一组互斥的选择项。要创建5个按钮的选项组,需要设置Buttoncount属性为5。 3. SetFocus方法:在编程中,SetFocus...
`Val()`函数用于将数字字符串转换成数值,而`Str()`函数则相反,它将数值转换成字符串形式。`Len()`函数用于计算字符串的长度。 - **分析**:`Val("123.4")`将返回数值123.4,再通过`Str()`转换回字符串"123.4",...