I like to use something like this:
select * from MyTable where MyFieldName like ‘%[^a-zA-Z0-9 !”%#$&”()*+,-./:;<=>?@]%’
to find field that contains special characters that are only allowed.
SQL is a standard language for storing, manipulating and retrieving data in relational databases.
I like to use something like this:
select * from MyTable where MyFieldName like ‘%[^a-zA-Z0-9 !”%#$&”()*+,-./:;<=>?@]%’
to find field that contains special characters that are only allowed.
Date range queries going too slow for you? SQL Performance got you down? I have one weird trick that might just help you out! (SQL Developers hate this!)*
If you have a class that records timestamps when the data is added, then that data will be in sequence with your IDKEY values - that is, TimeStamp1 < TimeStamp2 if and only if ID1 < ID2 for all IDs and TimeStamp values in table - then you can use this knowledge to increase performance for queries against TimeStamp ranges. Consider the following table:
Class User.I have a query string that I am creating programmatically, based on some user inputs. The user might search on 5 fields, or 8 fields, or no fields.
In my sql statment, some of these fields require parameters in the %Execute statement.
For example:
if user picks lastname, sql = "select * from person where lastname = ?"
if user also picks age, sql = "select * from person where lastname=? and age > ?"
I then have these lines of code to create my result set:
set statement = %SQL.Statement
statement.%Prepare
resultset = statement.%Execute(param1, param2)
-- but it might be
resultset = statement.
I have a class that writes to an external SQL Server database. When the field is empty, it does not write the column and the column has the value NULL. In some cases, I want the column to be the value of the empty string instead of NULL.
{
Property MessageType As %String
}
The message that is passed to this class shows:
<MessageType></MessageType>
Which writes the field as NULL with:
tSQL = "insert into myTable (MessageType) values (?)"
set tSC = ..Adapter.ExecuteUpdate(.tNumberOfRowsUpdated,tSQL,myRequestClass
Any suggestions on the most efficient way to convert yyyymmdd string to mm/dd/yyyy?
The Caché System Management Portal includes a robust web-based SQL query tool, but for some applications it’s more convenient to use a dedicated SQL client installed on a user’s PC.
SQuirreL SQL is a well known open source SQL client built in Java, which uses JDBC to connect to a DBMS. As such, we can configure SQuirreL to connect to Caché using the Caché JDBC driver.
The JAR file containing the Caché JDBC driver is installed automatically by the Caché installer when installing a full Caché instance or when installing client components only.
We use ExecureProcedure() to execute a stored procedure which returns a result set. But we see lot of "Invalid cursor state" errors when the result set is empty. The connection to SQL server database is made through ODBC.
ERROR #6022: Gateway failed: Fetch. + ERROR <Ens>ErrGeneral: SQLState: (24000) NativeError: [0] Message: [Microsoft][ODBC Driver 11 for SQL Server]Invalid cursor state
Here is the code snippet from the business operation class which uses
set tSC = ..
Class Queries in InterSystems IRIS (and Cache, Ensemble, HealthShare) is a useful tool that separates SQL queries from code. Basically, it works like this: suppose that you want to use the same SQL query with different arguments in several different places.In this case you can avoid code duplication by declaring the query body as a class query and then calling this query by name. This approach is also convenient for custom queries, in which the task of obtaining the next row is defined by a developer. Sounds interesting? Then read on!
Here is my original query:
SELECT EventType, InitiatedAt, COUNT(*) as cnt FROM HS_IHE_ATNA_Repository.Aggregation WHERE EventType = 'LOGIN' AND LocalDateTime > '2016-02-16 11:00:00' GROUP BY EventType, InitiatedAt
This gives me data like this:
| LOGIN | %SYSTEM | 69918 |
| LOGIN | OTHER | 39 |
However, I need to get the data back as two columns with all but the last concatenated and delimited, more like this:
| LOGIN;%SYSTEM | 69918 |
| LOGIN;OTHER | 39 |
I tried this:
SELECT EventType + ';' + InitiatedAt as k, COUNT(*) as cnt FROM HS_IHE_ATNA_Repository.
The Art of Mapping Globals to Classes 1 of 3
Looking to breathe new life into an old MUMPS application? Follow these steps to map your existing globals to classes and expose all that beautiful data to Objects and SQL.
By following the simple steps in this article and the next two you will be able to map all but the craziest globals to Caché classes. For the crazy ones I will put up a zip file of different mappings I have collected over the years. This is NOT for new data; if you don’t already have existing global please just use the default storage.
Could anyone please explain why Caché has a %STARTSWITH function while it supports ANSI SQL "LIKE"?
thank you very much.
Hey Developers,
We'd like to invite you to join our next contest dedicated to creating AI/ML solutions that use Cloud SQL to work with data:
🏆 InterSystems IRIS Cloud SQL and IntegratedML Contest 🏆
Duration: April 3 - April 23, 2023
Prize pool: $13,500
Error:
[SQLCODE: <-400>:<Fatal error occurred>]
[Cache Error: <<SUBSCRIPT>%0AmEdun+4^%sqlcq.HSREGISTRY.cls966.1 ^||%sql.temp(1,"")>]
[Location: <ServerLoop - Query Fetch>]
[%msg: <Unexpected error occurred: <SUBSCRIPT>%0AmEdun+4^%sqlcq.HSREGISTRY.cls966.1 ^||%sql.temp(1,"")>]
Here is an example of a query that gives the error:
SELECT COUNT(DISTINCT Criteria) as Relevance FROM HS_IHE_ATNA_Repository.Aggregation
WHERE EventType = 'CROSS GATEWAY QUERY'
The content of the actual field is XML, but the query simply returns a number.
As we all know, Caché is a great database that accomplishes lots of tasks within itself. However, what do you do when you need to access an external database? One way is to use the Caché SQL Gateway via JDBC. In this article, my goal is to answer the following questions to help you familiarize yourself with the technology and debug some common problems.
We have a new requirement being push down by our Data Security to no longer use Local SQL Accounts to access our Databases. So they asked me to create a Service Account that is on the Domain for our connections to each database.
I tried just changing my JDBC connection to using this Service Account and Password but I am not having any luck trying to connect to the database.
" Connection failed.
Login failed for user 'osumc\CPD.Intr.Service'.

In the first article in this series, we’ll take a look at the entity–attribute–value (EAV) model in relational databases to see how it’s used and what it’s good for. Then we'll compare the EAV model concepts to globals.
Sometimes you have objects with an unknown number of fields, or perhaps hierarchically nested fields, for which, as a rule, you need to search.
Take, for example, an online store with diverse groups of products. Each product group has its own unique set of properties and has common properties as well.
I have been using the query below and it was working fine but now it's giving a SQL error. There were no changes made that could cause this to stop working. There is no Field 'APPLICATIONID' in the table.
QueueSQL=select distinct (convert(char(5),SkillsetID)+'='+Skillset) from iagentbySkillsetStat where ApplicationID > 10000 QueueMappingSQL=SELECT DISTINCT (convert(char(5),SkillsetID)+'='+Skillset), SkillsetID FROM iagentbySkillsetStat iagentbySkillsetStat WHERE (iagentbySkillsetStat.ApplicationID>10000)
DB- Intersystems Cache
Error details for the log files are below.
14/09/2016 11:20:05 a.m.
As Bill has mentioned earlier in his post, we have carefully reviewed the JSON capabilities and made some adjustments to ensure they deliver the best benefit to you. In this post, I am going to describe the modifications in more detail and provide guidance for you to understand the implication for your code base.
Hi,
I'm doing a query in SQL and I need to sort my data by some non-repeated field.
Unfortunately, my data is grouped in a way that I cannot guarantee that any column will not have repeated data, so one solution would be to take the row number.
Also, the Cache is not accepting Row_Number () in my querry and I would like to know if there is another solution to return line numbers or some way to add this function to the Cache.
Best regards.
Would like to know if there is an alternative or better way to paginate through a dataset using dynamic SQL than what I am using below. The problem is that as the potential pool of data gets larger, this code slows down to the point of not being useable. In analyzing each line of code below, it appears the slow down is related to the initial rset.%Next() iteration. Is there anything available which does not require a subquery/%VID such as a simple LIMIT/OFFSET?
My code is similar to :
s sql=##class(%SQL.Statement).
This article is a simple quick starter (what I did was) with SqlDatabaseChain.
Hope this ignites some interest.
Many thanks to:
sqlalchemy-iris author @Dmitry Konnov Maslennikov
Your project made this possible today.
The article script uses openai API so caution not to share table information and records externally, that you didn't intend to.
A local model could be plugged in , instead if needed.
mkdir chainsql cd chainsql python -m venv .
Hi,
My doubt is about the SQL Query in Caché:
I don't want to take all results from the table and orgainze them manually, for example: I have a table with 50 records, but I only want to select 10 records, being from tenth until the twentieth and this without knowing their IDs.
So, how can I do this, without losing performance, there is any way?
NOTE: In other SQL languages I can do, for example, SELECT * FROM extbl Limit 10 OFFSET 10
Thanks,
Andrei L. Nenevê
I want to insert multiple records in the table using below queries, but it gives an error.
.png)
.png)
I am trying to convert a string to date but can not get it to work I have function that I would like to take in a date string and covert it to date object
here is the ezample so far can not get it to work any help appreciated
set p="12/03/2019"
w $System.SQL.TODATE(p,"YYYY-MM-DD")
<ILLEGAL VALUE>todate+32^%qarfuncif I try this still get the wrong value returned
set p="12/03/2019"
w $ZDATE(p,3)
1841-01-12Trackcare 2021.2
Please may I know how to access SQL parameter with string as datatype with NO reference to SQL Table and SQL Column.
Hi Experts,
I have these two clarifications to make:
This is what I tried: Tired to create ERD diagrams and try to extract Primary and Foreign keys to associate, but I cannot in this case
I would like to do something like this
Select * FROM
SQLUser.SS_User SSU
LEFT JOIN SQLUser.CT_Loc CTL ON CTL.CTLOC_Desc = ?I am trying to make architecture for my project. And for it, it needs to make list property in which there is list of objects of another table, the data must be unique, therefore I make sql-query to check objects of another table if it is used or not, but I can't make sql-query to check elements in list in property with elements of another table. Can you help me? In property ID of object is used.
Order is a necessity for everyone, but not everyone understands it in the same way (Fausto Cercignani)
Disclaimer: This article uses Russian language and Cyrillic alphabet as examples, but is relevant for anyone who uses Caché in a non-English locale. Please note that this article refers mostly to NLS collations, which are different than SQL collations. SQL collations (such as SQLUPPER, SQLSTRING, EXACT which means no collation, TRUNCATE, etc.) are actual functions that are explicitly applied to some values, and whose results are sometimes explicitly stored in the global subscripts. When stored in subscripts, these values would naturally follow the NLS collation in effect (“SQL and NLS Collations”).
I have a class that has a list property, which contains a list of other objects, and I want to join against it in SQL.
Class Foo Extends %Persistent
{
Property MyBars As list Of Bar;
}Class Bar Extends %Persistent { Property Name As %String; }
Simply querying the Foo table, I see that MyBars looks like a $LIST, so I tried using a query with the %inlist operator but that didn't seem to work as expected. The following query produces zero results:
select bar.name from foo join bar on bar.id %INLIST MyBars
Is there some convenient way to do this sort of join?
A good writer is supposed to draw you in with the title and bury the answer somewhere in the article. I suppose this makes me a bad writer – don’t think less of me, my whole feeling of self-worth comes from the opinions of internet strangers!
Hi guys.
I need validate a field string in a table. It needs have a specific mask
I want use regex + CASE expression
There is any function to this purpose in SQL?