RTrim和LTrim,怎么不起作用?SQL小问.

wonkju 2013-08-05 12:32:34
这是我在SSMS写的临时SQL代码:
--没有去掉空格.
select FBranch,LEN(FBranch) from T_StuffBasic where FId = '00001'
--取消右边空格.
select RTRIM(FBranch),LEN(RTRIM(FBranch)) from T_StuffBasic where FId = '00001'
--先右后坐去掉空格.
select LTrim(RTrim(FBranch)),LEN(LTrim(RTrim(FBranch))) from T_StuffBasic where FId = '00001'
--先左后右去掉空格.
select RTRIM(LTRIM(FBranch)),LEN(RTRIM(LTRIM(FBranch))) from T_StuffBasic where FId = '00001'


运行结果都一样,为:

这是我在存储过程写的,其实和上面的最后两条一样:
ALTER PROCEDURE USP_GetT_StuffBasicFilterExtraFiledByField	--过滤从别的表获得数据的字段值.
@FieldName nvarchar(20),
@FieldVal nvarchar(50)
AS
SET NOCOUNT ON
declare @query nvarchar(max)
set @query = 'select FId,FStuffName,LTrim(RTrim(FFolk)),FFolk,FBirthday,FAge,LTrim(RTrim(FKultur)),FKultur,FMarriage,
FSex,LTrim(RTrim(FVisage)),FVisage,FIdCard,FWorkDate,FWorkLength,LTrim(RTrim(FEmployeeGenere)),FEmployeeGenere,
LTrim(RTrim(FBusiness)),FBusiness,LTrim(RTrim(FLaborage)),FLaborage,LTrim(RTrim(FBranch)),FBranch,
LTrim(RTrim(FDuthcall)),FDuthcall,FPhone,FHandSet,FSchool,FSpeciality,FGraduateDate,FAddress,FPhoto,
LTrim(RTrim(FProName)),FProName,LTrim(RTrim(FCityName)),FCityName,FMonthSalary,FBankNum,FPackStartDate,
FPackEndDate,FPactYear,FStuId from T_StuffBasic where '+@FieldName+' = '''+@FieldVal+''''
exec(@query)


我将上面的存储过程封装为一个方法,返回DataTable.
C#代码为:
/// <summary>
/// 指定存储过程名,返回的表名,字段名和对应的值查找结果.
/// </summary>
/// <param name="proceName">存储过程名.</param>
/// <param name="tableName">表名.</param>
/// <param name="fieldName">字段名.</param>
/// <param name="fieldVal">字段值.</param>
/// <returns>返回结果集的DataTable.</returns>
public static DataTable GetStuffBasicDataTableByProcedure(string proceName, string tableName, string fieldName, string fieldVal) {
_Set = new DataSet();
using(SqlConnection connect = new SqlConnection(strConn)) {
connect.Open();
using(SqlCommand cmd = connect.CreateCommand()) {
cmd.CommandText = proceName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@FieldName", SqlDbType.NVarChar, 20).Value = fieldName;
cmd.Parameters.Add("@FieldVal", SqlDbType.NVarChar, 50).Value = fieldVal;
_Adapter = new SqlDataAdapter(cmd);
_Adapter.Fill(_Set, tableName);
return _Set.Tables[tableName];
}
}
}

当我调用的时候,
DataRow rCurrent = _AcceptTable.Rows[_SelectedIndex];
string s = rCurrent["FBranch"]
//这里s返回"C#部门 ",也就是说怎么还有空格.何解?


我的代码虽然上了很多,但是问题很简单明了...大家帮忙看看...谢谢了...
...全文
466 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wonkju 2013-08-05
  • 打赏
  • 举报
回复
引用 1 楼 zxy397472251 的回复:
rCurrent["FBranch"].TOSTRING().TRIM();
这样我之前是用过这样,但是感觉好凌乱的逻辑. 想改下,所以我想在过滤的时候,用SQL语句直接去掉空格...但是不知道这样为什么弄不了. 而且在 ssms的时候,加上 LTrim或RTrim反而多"空格"(貌似是虚的). 但是用len测,长度都一样.真的不解...
CqCoder 2013-08-05
  • 打赏
  • 举报
回复
rCurrent["FBranch"].TOSTRING().TRIM();
wonkju 2013-08-05
  • 打赏
  • 举报
回复
引用 3 楼 phommy 的回复:
想到两个地方,你确认 数据类型如果是char的,改成varchar就好了,否则怎么trim都是定长 .net的trim是包括全角空格的,数据库是怎么trim就不清楚了
被你说中了. 本来我的内容是放在另一个表 T_Branch,字段是 nvarchar类型,但是在引用表,即当前表的时候,不小心弄为 nvar了.... 你说的应该是trim半角吧,应该说错了? 半角是英文,trim的应该是半角.老外的语言嘛....
phommy 2013-08-05
  • 打赏
  • 举报
回复
想到两个地方,你确认 数据类型如果是char的,改成varchar就好了,否则怎么trim都是定长 .net的trim是包括全角空格的,数据库是怎么trim就不清楚了

111,104

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧