ThinkGeo.com    |     Documentation    |     Premium Support

OLEDB.JET query functions Cast or Convert

I am trying to do a query on the shapefile database where I need to convert or cast a field to a numeric.


My problem is that some of the data is padded with blanks. Cast(fieldname as int) and Convert(fieldname, int)are not supported. Ltrim and Rtrim are not supported.



Is there any way using layer.QueryTools.ExecuteQuery(sql)  to convert a string to a number as part of the where clause?


Thanks!


Cyndi Pruett



 



Hi, Cyndi 
  
 We are not clear about your problem. If you want to convert a string to a number and use it as the part of the where clause; why don’t you try the ToInt32 method of Convert class or the TryParse method of Int32 struct; Also removes all leading and trailing white-space characters from the current string, maybe you could try the Trim method of String. 
 If I misunderstand your meaning, please correct me and provide us with your scenario. 
  
 Thanks, 
 Khalil

what I am trying to do is: 
  
 Dim strSql = “SELECT * from CLU_ND WHERE  ((stateCD=‘38’ AND CountyCd=‘009’) or (trim(stateCD)=‘38’ AND trim(CountyCd)=‘9’) )” 
 varLayer.Open() 
 Dim dataTable As DataTable = varLayer.QueryTools.ExecuteQuery(strSQL) 
 varLayer.Close() 
  
 Trim does help (I was trying to do a ltrim and rtrim - but not supported) 
 If I could cast or convert statecd and countycd into a numeric I could do a direct compare.  
 The ToInt32 is not supported 
  
 Make a bit more sense? 
 Thanks!

Cyndi, 
  
 I’m sorry but I need to say that we don’t support “CAST(expression AS data_type)” syntax or something else to convert a string to “int” now, but that’s a good idea that I will discuss and consider to add it to our work list. 
  
  Sorry. 
  
 Johnny 
  
  
  
  


Unfortunately, I think you'all are using the Jet DB Engine to do all the queries. So unless we can get MS to do something...(Maybe at the same time they can fix the 8.3 naming convention issue!)


Thanks for looking at it..


I'm off to rebuild some .dbf files!


Cyndi



From one of my coworkers - Chris Moffett


Try CINT(), CLNG() or CDBL() to convert a string to an integer, long or double data value. 


For example:


 
SELECT * FROM table WHERE CINT(TRIM(textfield)) = 0
 
I don’t know if ThinkGeo supports this, but the CINT, CLNG and CDBL functions are built into the Microsoft JET database engine and should be available in any application that uses this data provider.
 
Caveat: If the data contains nulls or non-numeric data, it gets a little trickier as these functions will throw an error instead of returning a 0.

 


 



 Cyndi,


I agree that any functions built in the Microsoft JET database engine should be supported by ThinkGeo, as you know we are using Microsoft JET OLEDB engine to do the queries dbf.  And I tested the sql statement you provided. It gets a little trickier when the data contains nulls or non-numeric data. I am sorry but I have to say I have no better idea now. Sorry for the inconvenience.


Thanks,


Johnny